Downloader scripten so?

  • Hallo,

    ich möchte einen Downloader scripten und habe mir schon mal gedanken darüber gemacht und wollte mal fragen, ob so ein guter Downloader aussieht :

    1. GUI mit Ladebalken

    2. Das überprüfen, ob eine Datei im Ordner bereits vorhanden ist, damit falls jemand den Downloader abbricht, der Downloader wieder dort startet, wo er aufgehört hat.

    3. Wenn Datei nicht im Ordner vorhanden ist, dann lädt er die Datei in den Ordner.

    4. Ich habe davor die % Anzahl von den MB´s ausgerechnet und der Ladebalken erhöht sich immer um eine bestimmte Anzahl, sodass es genau hinhaut.

    So wäre dann doch ein Downloader oder habt ihr irgendwelche Verbesserungsvorschläge? Mein Script habe ich noch nicht reingestellt, da ich damit noch nicht ganz fertig bin.

    Und noch ein Problem: Wenn ich dann eine größere Datei downloaden , dann springt der Ladebalken danach ja z.B. von 30% auf 50% über ... kann ich es so machen, dass er überprüft, wv von der Datei bereits gedownloadet wurde und er dann den Ladebalken höher setzt?

    Einmal editiert, zuletzt von White (17. Juni 2011 um 11:44)

  • Hi,

    Das überprüfen, ob eine Datei im Ordner bereits vorhanden ist

    [autoit]

    fileexists

    [/autoit]

    damit falls jemand den Downloader abbricht, der Downloader wieder dort startet, wo er aufgehört hat.


    Das geht mit InetGet nicht. Man müsste mal die winHTTP Dokumentation durchsuchen und wenn es da nichts gibt sollte man sich mal cURL angucken.

    Wenn ich dann eine größere Datei downloaden , dann springt der Ladebalken danach ja z.B. von 30% auf 50% über


    Das kann man ganz einfach, flüssiger gestalten:

    Spoiler anzeigen
    [autoit]

    Global $iDownloads = 5 ;Hier die Anzahl der Downloads eintragen
    Dim $aDownloads[$iDownloads][2] ;Array erstellen
    Dim $aFortschrittsControls[$iDownloads]

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

    ;Array befüllen
    For $x = 0 To $iDownloads - 1
    $aDownloads[$x][0] = 0 ;Dateifortschritt
    $aDownloads[$x][1] = Random(10, 1000, 1) ;Zufällige Dateigröße
    Next

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

    ;Gui erstellen
    $hGUI = GUICreate("Prozent Demo", 500, 500)
    $cGesamtFortschritt = GUICtrlCreateProgress(1, 450, 499, 59) ;gesamtfortschritt

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

    ;Fortschrittslabels erzeigen
    For $x = 0 To $iDownloads - 1
    GUICtrlCreateLabel("Download " & $x + 1 & ":", 1, $x * 20, 70, 15)
    $aFortschrittsControls[$x] = GUICtrlCreateLabel("0/" & $aDownloads[$x][1] & "0%", 75, $x * 20, 100, 15)
    Next
    GUISetState(@SW_SHOW)

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

    Local $iHerruntergeladeneBytes,$iListGroesse
    ;Los gehts ^^
    For $iAktuellerDownload = 0 To $iDownloads - 1
    For $x = 1 To $aDownloads[$iAktuellerDownload][1]
    Sleep(10) ;verzögerung
    $aDownloads[$iAktuellerDownload][0] += 1;1 Byte herrunterladen (das ist hier natürlich nur symbolisch gemeint)

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

    ;label updaten
    GUICtrlSetData($aFortschrittsControls[$iAktuellerDownload], _
    $aDownloads[$iAktuellerDownload][0] & "/" & $aDownloads[$iAktuellerDownload][1] & " " _ ;"Herruntergeladene Bytes / Dateigröße"
    & Int(($aDownloads[$iAktuellerDownload][0] * 100) / $aDownloads[$iAktuellerDownload][1]) & "%") ;Fortschritt für die Datei
    ;Einfache Prozentrechnung: (Herruntergeladene Bytes* 100) / Dateigröße

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

    ;Gesamtfortschritt berechnen
    ;im Prinzip funktioniert das genau so wie die Berechnung für eine Datei
    ;nur wird hier alles zusammengerechnet
    $iHerruntergeladeneBytes = 0
    $iListGroesse = 0
    For $i = 0 To $iDownloads - 1
    $iHerruntergeladeneBytes += $aDownloads[$i][0]
    $iListGroesse += $aDownloads[$i][1]
    Next

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

    ;Gesamtfortschritt updaten
    GUICtrlSetData($cGesamtFortschritt, ($iHerruntergeladeneBytes * 100) / $iListGroesse)
    Next
    Next
    MsgBox(0,"Download Abgeschlossen","Es wurden " & $iListGroesse & " Bytes heruntergeladen!")

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

    While GUIGetMsg() <> -3
    WEnd

    [/autoit]
  • Hallo white,

    zu 2. wie Sprenger schon anmerkte kann man einen Unterbrochenen Dateidonwload nicht fortsetzen. Das einzigtse was du tun kannst ist falls mehrer Dateien heruntergeladen werde sollen bei einer Unterbrechung nach der zletzt erfolgreich heruntergeladenen wietermachen. Dann hast d aber das Problem das ein Fragment der fehlgeschlagenen Datei existiert und Punkt 2 zutrifft. Aber auch dies lässt sich mt der entsprechenden Logik lösen.

    zu 4. einfache Prozentrechnung vor dem Herunterladen die Grössen aller Dateien ermitteln (InetGetSize) und aufaddieren. Während des Herunterladens mit InetgetInfo den Stand des aktuelen Downloads ermitteln. Im Forum Skripte habe ich vor längerer Zeit einmal ein Beispiel dazu gepostet

    mfg autoBert