Gesamtfortschritt wird nicht richtig aktualisiert?

  • Hallo, ich habe das Problem, dass der Gesamtfortschritt bei meinem Downloader / Minipatcher nicht richtig aktualisiert wird.

    Weiß vielleicht jemand wieso?
    Skript :

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <ProgressConstants.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <String.au3>
    #include <File.au3>
    #include <Array.au3>
    #include <Crypt.au3>
    #include <Inet.au3>
    HttpSetUserAgent("Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.2.7) Gecko/20100713 Firefox/3.6.16")
    $Form1 = GUICreate("Miniloader", 615, 294, 186, 214)
    $ProgressGesamt = GUICtrlCreateProgress(8, 232, 598, 17)
    $ProgressEinzeln = GUICtrlCreateProgress(8, 272, 598, 17)
    $LabelDatei = GUICtrlCreateLabel("Datei", 8, 256, 445, 17)
    $LabelTotalfortschritt = GUICtrlCreateLabel("Totalfortschritt", 8, 208, 443, 17)
    Global $WebspaceAdresse = "MeinWebspaceName", $ProgressStatusGesamt = 0 , $PDatalist = @ScriptDir & "\Data\DataList.txt" , $Lines
    GUISetState(@SW_SHOW)

    [/autoit] [autoit][/autoit] [autoit]

    #region Datalist Überprüfung und gegebenenfalls Aktualisierung
    If InetGetSize($WebspaceAdresse & "DataList.txt") <> FileGetSize(@ScriptDir & "\Data\DataList.txt") Then
    InetGet($WebspaceAdresse & "DataList.txt",@ScriptDir & "\Data\DataList.txt")
    If @Error Then MsgBox(64,"Fehler","Fehler beim herunterladen der Datalist.txt von :" & $WebspaceAdresse & "DataList.txt")
    ElseIf Not FileExists(@ScriptDir & "\Data\DataList.txt") Then
    InetGet($WebspaceAdresse & "DataList.txt",@ScriptDir & "\Data\DataList.txt")
    If @Error Then MsgBox(64,"Fehler","Fehler beim herunterladen der Datalist.txt von :" & $WebspaceAdresse & "DataList.txt")
    EndIf
    #endregion Datalist Überprüfung und gegebenenfalls Aktualisierung
    #region Datalist.txt öffnen und lesen
    $OpenDatalist = FileOpen(@ScriptDir & "\Data\DataList.txt")
    $ReadDatalist = FileRead($OpenDatalist)
    #endregion Datalist.txt öffnen und lesen
    #region Gesamtbytes ermitteln und Md5 Hashes überprüfen
    If StringInStr($ReadDatalist, 'Gesamt: "') Then
    $BytesGesamt = _StringBetween($ReadDatalist, 'Gesamt: "', '"')
    ConsoleWrite("Gesamtbytes : " & $BytesGesamt[0] & @CRLF)
    _FileReadToArray($PDatalist,$Lines)
    For $i = 1 to _FileCountLines($PDatalist) -1
    $SplitLine = StringSplit($Lines[$i],'|')
    GuiCtrlSetData($LabelDatei,"Überprüfen von " & $SplitLine[1])
    If Not FileExists($SplitLine[1]) or Not (_Crypt_HashFile($SplitLine[1],$CALG_MD5) == $SplitLine[2]) Then
    Local $DownloadData = InetGet($WebspaceAdresse & $SplitLine[1],@ScriptDir & '\' & $SplitLine[1],0,1)
    If @Error Then MsgBox(64,"Fehler","Die Datei " & $SplitLine[1] & " konnte nicht heruntergeladen werden.")
    GuiCtrlSetData($LabelDatei,"Downloaden von " & $SplitLine[1])
    Do
    GuiCtrlSetData($ProgressEinzeln,(100/$SplitLine[3])*InetGetInfo($DownloadData,0))
    $ProgressStatusGesamt += (100/$BytesGesamt)*InetGetInfo($DownloadData)
    GuiCtrlSetData($ProgressGesamt,$ProgressStatusGesamt)
    Until InetGetInfo($DownloadData,2)
    GuiCtrlSetData($ProgressEinzeln,100)
    Else
    $ProgressStatusGesamt += (100/$BytesGesamt)*$SplitLine[3]
    GuiCtrlSetData($ProgressGesamt,$ProgressStatusGesamt)
    EndIf
    Next
    GuiCtrlSetData($LabelTotalfortschritt,"Patchvorgang erfolgreich abgeschlossen")
    GuiCtrlSetData($LabelDatei,"")
    While 1
    sleep(20)
    WEnd
    Else
    ConsoleWrite($ReadDatalist & @CRLF)
    MsgBox(64, "Fehler", "Es fehlt die Angabe der Gesamtbytes in der DataList.txt")
    EndIf

    [/autoit]

    Mit freundlichen Grüßen,

    Julien

    Einmal editiert, zuletzt von Julien (28. Februar 2012 um 18:59)

  • Hallo Julien,

    ich hab das Skript mal abgeändert:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <ProgressConstants.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <String.au3>
    #include <File.au3>
    #include <Array.au3>
    #include <Crypt.au3>
    #include <Inet.au3>
    HttpSetUserAgent("Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.2.7) Gecko/20100713 Firefox/3.6.16")
    $Form1 = GUICreate("Miniloader", 615, 294, 186, 214)
    $ProgressGesamt = GUICtrlCreateProgress(8, 232, 598, 17)
    $ProgressEinzeln = GUICtrlCreateProgress(8, 272, 598, 17)
    $LabelDatei = GUICtrlCreateLabel("Datei", 8, 256, 445, 17)
    $LabelTotalfortschritt = GUICtrlCreateLabel("Totalfortschritt", 8, 208, 443, 17)
    Global $WebspaceAdresse = "MeinWebspaceName", $ProgressStatusGesamt = 0, $PDatalist = @ScriptDir & "\Data\DataList.txt", $Lines
    GUISetState(@SW_SHOW)

    [/autoit] [autoit][/autoit] [autoit]

    #Region Datalist Überprüfung und gegebenenfalls Aktualisierung
    If InetGetSize($WebspaceAdresse & "DataList.txt") <> FileGetSize(@ScriptDir & "\Data\DataList.txt") Then
    InetGet($WebspaceAdresse & "DataList.txt", @ScriptDir & "\Data\DataList.txt")
    If @error Then MsgBox(64, "Fehler", "Fehler beim herunterladen der Datalist.txt von :" & $WebspaceAdresse & "DataList.txt")
    ElseIf Not FileExists(@ScriptDir & "\Data\DataList.txt") Then
    InetGet($WebspaceAdresse & "DataList.txt", @ScriptDir & "\Data\DataList.txt")
    If @error Then MsgBox(64, "Fehler", "Fehler beim herunterladen der Datalist.txt von :" & $WebspaceAdresse & "DataList.txt")
    EndIf
    #EndRegion Datalist Überprüfung und gegebenenfalls Aktualisierung
    #Region Datalist.txt öffnen und lesen
    $OpenDatalist = FileOpen(@ScriptDir & "\Data\DataList.txt")
    $ReadDatalist = FileRead($OpenDatalist)
    #EndRegion Datalist.txt öffnen und lesen
    #Region Gesamtbytes ermitteln und Md5 Hashes überprüfen
    If StringInStr($ReadDatalist, 'Gesamt: "') Then
    $BytesGesamt = _StringBetween($ReadDatalist, 'Gesamt: "', '"')
    ConsoleWrite("Gesamtbytes : " & $BytesGesamt[0] & @CRLF)
    _FileReadToArray($PDatalist, $Lines)
    $iDowbloaded = 0 ;<=============bereits heruntergeladene Bytes initialisieren
    For $i = 1 To _FileCountLines($PDatalist) - 1
    $SplitLine = StringSplit($Lines[$i], '|')
    GUICtrlSetData($LabelDatei, "Überprüfen von " & $SplitLine[1])
    If Not FileExists($SplitLine[1]) Or Not (_Crypt_HashFile($SplitLine[1], $CALG_MD5) == $SplitLine[2]) Then
    Local $DownloadData = InetGet($WebspaceAdresse & $SplitLine[1], @ScriptDir & '\' & $SplitLine[1], 0, 1)
    If @error Then MsgBox(64, "Fehler", "Die Datei " & $SplitLine[1] & " konnte nicht heruntergeladen werden.")
    GUICtrlSetData($LabelDatei, "Downloaden von " & $SplitLine[1])
    Do
    GUICtrlSetData($ProgressEinzeln, (100 / $SplitLine[3]) * InetGetInfo($DownloadData, 0))
    ;$ProgressStatusGesamt += (100/$BytesGesamt)*InetGetInfo($DownloadData)
    $ProgressStatusGesamt = 100 / $BytesGesamt[0] * (InetGetInfo($DownloadData, 0) + $iDowbloaded) ;<=============
    GUICtrlSetData($ProgressGesamt, $ProgressStatusGesamt)
    Until InetGetInfo($DownloadData, 2)
    GUICtrlSetData($ProgressEinzeln, 100)
    ;Else
    ;$ProgressStatusGesamt += (100/$BytesGesamt)*$SplitLine[3]
    ;GuiCtrlSetData($ProgressGesamt,$ProgressStatusGesamt)
    EndIf
    $iDowbloaded += $SplitLine[3] ;<============= zu bereits heruntergeladenen Btes dazuzählen
    $ProgressStatusGesamt = 100 / $BytesGesamt[0] * $iDowbloaded ;<=============
    GUICtrlSetData($ProgressGesamt, $ProgressStatusGesamt)
    Next
    GUICtrlSetData($LabelTotalfortschritt, "Patchvorgang erfolgreich abgeschlossen")
    GUICtrlSetData($LabelDatei, "")
    While 1
    Sleep(20)
    WEnd
    Else
    ConsoleWrite($ReadDatalist & @CRLF)
    MsgBox(64, "Fehler", "Es fehlt die Angabe der Gesamtbytes in der DataList.txt")
    EndIf

    [/autoit]

    die Zeilen in denen ich Änderungen vorgenommen bzw.eingefügt habe sind mit ;<=== gekennzeichnet

    mfg autoBert