FTP Ordner auslesen + Download

  • Hallo,

    ich fand das interessant und habe mir auch mal so ein kleines Skript gebaut, damit es nicht ganz unnütze ist, stelle ich es hier mal rein :)

    Mein Dateiaufbau ist einach:
    Datei1.xxx
    Datei2.xxx
    ......

    Spoiler anzeigen
    [autoit]


    #include <GUIConstants.au3>
    #include <Array.au3>

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

    ; Url zum Webverzeichnis
    Dim $ServerUrl = "http://www.DEINSERVER.de/test/"

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

    ; Dateiliste die runtergeladen werden soll
    Dim $FileList = "files.txt"

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

    ;Speicherpfad für Liste
    Dim $SaveFileList = @TempDir & "\files.txt"

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

    ;Textdatei laden
    If InetGet($ServerUrl & $FileList,$SaveFileList,1) = 0 Then
    MsgBox(48,"Feheler...","Fehler beim download der Dateiliste")
    Exit 1
    EndIf

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

    ;Dateiliste zum lesen öffnen
    Dim $fso = FileOpen($SaveFileList,0)

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

    ;Inhalt der Datei einlesen
    Dim $txt = FileRead($fso)

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

    ;Dateiliste schliessen
    FileClose($fso)

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

    ;@LF aus der $txt Variabele entfernen
    $txt = StringReplace($txt,@CRLF,"|")

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

    ;Form
    $frmMain = GUICreate("FileLoader", 285, 150, 193, 125)
    $pcbDownload = GUICtrlCreateProgress(24, 64, 233, 17)
    $infoLabel = GUICtrlCreateLabel("",24,84,233,25,$SS_CENTER )
    $cmdButton = GUICtrlCreateButton("Start Download", 24, 104, 233, 25, 0)
    GUICtrlSetState(-1,$GUI_DISABLE)
    $FileList = GUICtrlCreateCombo("FileList", 24, 24, 233, 25)
    GUICtrlSetData(-1, $txt)

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

    GUISetState(@SW_SHOW)

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

    ;Variable für die derzeit Ausgewählte Datei
    Dim $selectet

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

    ;Variable für die Dateiendung
    Dim $mediaformat

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

    ;Speicherort
    Dim $SaveFile

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $cmdButton
    $SaveFile = FileSaveDialog("Datei speichern..",@DesktopDir,"Video (*." & $mediaformat & ")",2,GUICtrlRead($FileList))
    If NOT @error Then RunDownload()

    Case $FileList
    GUICtrlSetData($infoLabel,"")
    GUICtrlSetData($pcbDownload,0)
    $selectet = $ServerUrl & GUICtrlRead($FileList)
    InetGetSize($selectet)
    If @error Then
    GUICtrlSetState($cmdButton,$GUI_DISABLE)
    Else
    GUICtrlSetState($cmdButton,$GUI_ENABLE)
    EndIf
    $mediaformat = StringRight(GUICtrlRead($FileList),3)
    EndSwitch
    WEnd

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

    Func RunDownload()
    GUISetState(@SW_DISABLE)
    $FileSize = InetGetSize($selectet)
    InetGet($selectet,$SaveFile,1,1)
    $curSize = 0
    Do
    GUICtrlSetData($pcbDownload,$curSize)
    $curFileSize = FileGetSize($SaveFile)
    $curSize = $curFileSize * 100
    $curSize = $curSize / $FileSize
    $curSize = Ceiling($curSize)
    $curFileSize = Round($curFileSize / 1024 / 1024,2)
    GUICtrlSetData($infoLabel,$curFileSize & " - " & Round($FileSize / 1024 / 1024,2) & " MB (" & $curSize & "%)")
    Sleep(200)
    ConsoleWrite($curSize & @lf)
    Until $curSize >= 99
    GUISetState(@SW_ENABLE)
    EndFunc

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

    Mfg
    Jens (McPoldy)

    Twitter: jkroeger

    Denn die Dinge, die wir erst lernen müssen, bevor wir sie tun, lernen wir beim Tun.(Aristoteles)

  • Ich wollte mal fragen, ob es möglich ist das Script so einzustellen, dass wenn ich im DropDownMenu
    einen Eintrag auswähle, das Script sofort prüft ob die Datei bereits gedownloadet wurde oder nicht?!

    Also nicht jede Sekunde sondern nur wenn der Input in der DropDownbox sich ändert.
    Und nocheinmal nachdem die Datei gedownloadet wurde (das bekomm ich mit dem entsprechenden Befehle denk ich mal alleine hin)

    Einmal editiert, zuletzt von Fredooo (25. Januar 2008 um 19:48)

  • Zitat

    Ich wollte mal fragen, ob es möglich ist das Script so einzustellen, dass wenn ich im DropDownMenu
    einen Eintrag auswähle, das Script sofort prüft ob die Datei bereits gedownloadet wurde oder nicht?!

    Wenn Du einen festen Pfad hast wo der Benutzer seinen Download ablegen muss, dann ja. Halte ich aber für nicht so klug, da der Benutzer ja selber entscheiden will wo er seine Dateien ablegt. Zum prüfen ob eine Datei besteht :FileExists

    Zitat

    Und nocheinmal nachdem die Datei gedownloadet wurde (das bekomm ich mit dem entsprechenden Befehle denk ich mal alleine hin)

    Das ist eine gute Idee, mit InetGetSize($url) bekommste die Größe wie sie sein soll, mit FileGetSize die Größe der runtergeladenen Datei, schaue ob sie gleich groß sind und du weißt ob der Download komplett war.
    Zweite Möglichkeit, wenn du den Download nicht im Hintergrund laufen lässt, $result = InetGet($url) wenn eine 1 in $result ist war alles ok sonst steht da eine 0 drin.

    Mfg
    Jens (McPoldy)

    Twitter: jkroeger

    Denn die Dinge, die wir erst lernen müssen, bevor wir sie tun, lernen wir beim Tun.(Aristoteles)

  • Also ich habe einen demos ordner createn lassen wo alle runtergladenen Demos eingefügt werden...
    Das Script überprüft im Moment noch ob die ausgewählte Datei (Demo) schon in diesem Ordner vorhanden ist.
    Wenn nicht poppt im Moment noch ein MsgBox auf mit dem hinweis, dass die Datei schon vorhanden ist.
    Jedoch fängt er kurz danach wieder an die Datei erneut zu ziehen.

    Daher will ich es so lösen, dass es eben so ufnktioniert:

    Ich lade demo1 runter
    danach wähle ich demo2 aus und lade die ebenfalls runter
    wenn ich dann wieder auf demo1 gehe (im DropDownMenu) soll das Script nach Möglichkeit den Button
    Download disablen und erst weider enablen wenn ich im DropDownMenu eine demo ausgewählt habe, die noch nicht
    mit dem selben Namen im ordner demos enthalten ist.

    Wenn der User die Dateien dann verschiebt muss er sie sich eben wieder neu runterziehe (wenn er will)

    Also eben kurz gesagt
    DropDownMenu Datei auswählen und checken ob es bereits eine Datei mit diesem namen gibt.
    Wenn nicht Button Download enabled lassen.
    Wenn doch dann Button Download disablen.

    hoffe war gut verständlich?!
    und ich würde mich sehr über weitere hilfe freune ;)

    Großes Dankeschön bisher schon mal an euch ;)

    MfG Fredooo :rock: ;)

  • Hier noch mal ein wirklich einfaches Beispiel, aber ich würde mir mal die Hilfe Datei ansehen, das sind nun wirklich elementare Sachen (nicht böse gemeint). Zudem warum werden Beispiele gepostet die Du dir nicht mal ansiehst, in meinen Skript zunutze ich eigentlich alle Funktionen die du benötigst, vielleicht nicht in dem Zusammenhang wie Du es gerne haben möchtest, aber man kann es leicht abändern.

    Wie schon gesagt, nicht böse gemeint, nur ich denke, das es eine gute Hilfe Datei beim AutoIT gibt, die man auch ruhig mal benutzen darf ;)

    Hier nun das Beispiel:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>

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

    $pfad = @TempDir & "\"
    $server = "http://www.hardcopy.de/"

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 350, 187, 193, 125)
    $Combo1 = GUICtrlCreateCombo("Combo1", 16, 24, 241, 25)
    GUICtrlSetData(-1,"hc.exe|hcf.exe")
    $Button1 = GUICtrlCreateButton("Button1", 24, 80, 233, 41, 0)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Combo1

    If FileExists($pfad & GUICtrlRead($Combo1)) = 1 Then
    GUICtrlSetState($Button1,$GUI_Disable)
    Else
    GUICtrlSetState($Button1,$GUI_Enable)
    EndIf
    Case $Button1
    If InetGet($server & GUICtrlRead($Combo1),$pfad & GUICtrlRead($Combo1),1,0) Then MsgBox(64,"Info","Download OK")

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

    EndSwitch
    WEnd

    [/autoit]

    Mfg
    Jens (McPoldy)

    Twitter: jkroeger

    Denn die Dinge, die wir erst lernen müssen, bevor wir sie tun, lernen wir beim Tun.(Aristoteles)

  • Ne keine Angst ich seh das auch überhaupt nich böse gemeint an oder so ;)
    Bin ja dankbar dass ihr mir so gut unter die Arme greift :)

    Und ja ok ich weiß ich bin immer bissel zu schnell mit fragen...
    bin eben immer bissel faul selber zu lesen :)
    Aber werd mir jetz mal die HilfeDatei anschauen ^^
    Danke aufjedenfall für die Tips.

    werd *hoffentlich* erst wieder hier reinschreiben müssen wenn das Tool funktioniert :)

  • Freu mich drauf, kannst Du ja mal online stellen, schaue mir immer gerne gute CS Clips an.

    Mfg
    Jens (McPoldy)

    Twitter: jkroeger

    Denn die Dinge, die wir erst lernen müssen, bevor wir sie tun, lernen wir beim Tun.(Aristoteles)