[Beispiel] FTP-Downloader (rekursive Download's )

  • Hallo Com,

    hier ein altes Projekt auf die aktuelle Stable (3.3.12.0) angepasst:

    [autoit]

    #AutoIt3Wrapper_Au3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <EditConstants.au3>
    #include "FTP_FileList_Recursiv.au3"
    #include <GuiScrollBars.au3>

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

    Opt('MustDeclareVars', 1)

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

    Global $sServer='127.0.1', $sUser='Bert',$sPass='Test'

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

    _CreateGui()

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

    Func _CreateGui()
    Local $l_InternetSession = -99, $l_FTPSession
    Local $errOpen, $errFTP
    Local $nMsg
    Local $iMaxDepth=3;max 3 vereichnisebenen <1=unendliche Rekrusionstiefe
    Local $mainGui = GUICreate("FTP-Downloader", 623, 450, 271, 235)
    Local $idLblLog = GUICtrlCreateEdit("", 8, 5, 467, 315, BitOR($WS_HSCROLL, $WS_VSCROLL))
    Local $hLog = GUICtrlGetHandle($idLblLog)
    Local $idPrgFile = GUICtrlCreateProgress(8, 344, 598, 25)
    Local $hGuiChild1 = GUICreate("Child1", 594, 21, 10, 346, $WS_POPUP, $WS_EX_MDICHILD, $mainGui)
    Local $idLblFilePer = GUICtrlCreateLabel("", 2, 2, 590, 17, $SS_CENTER)
    GUICtrlSetFont(-1, 11, 2800)
    WinSetTrans($hGuiChild1, "", 180)
    GUISwitch($mainGui)
    Local $idLblFile = GUICtrlCreateLabel("", 8, 322, 594, 17)
    Local $idPrgKB = GUICtrlCreateProgress(8, 392, 598, 25)
    Local $hGuiChild2 = GUICreate("Child2", 595, 23, 10, 394, $WS_POPUP, $WS_EX_MDICHILD, $mainGui)
    Local $idLblKBPer = GUICtrlCreateLabel("", 2, 1, 590, 19, $SS_CENTER)
    GUICtrlSetFont(-1, 11, 2800)
    WinSetTrans($hGuiChild2, "", 180)
    GUISwitch($mainGui)
    Local $idLblKB = GUICtrlCreateLabel("", 8, 372, 594, 17)
    GUICtrlCreateLabel('Rekursionstiefe"',530,5)
    Local $idInpMaxDepth= GUICtrlCreateInput("3",483,5,35,22,$ES_NUMBER)
    GUICtrlSetTip(-1,'Maxinale Rekursionstiefe,<1=unendlich')
    Local $idBtnConnect = GUICtrlCreateButton("&Verbinden", 483, 40) ;verbinden mit FTP-Server
    Local $idBtnDisconnect = GUICtrlCreateButton("&Trennen", 483, 80) ;vom Server trennen
    Local $idBtnDL = GUICtrlCreateButton("&Download", 483, 120) ;Download starten
    Local $idBtnExit = GUICtrlCreateButton("Be&enden", 483, 160) ;Exit
    GUICtrlSetState($idBtnDL, $Gui_DISABLE)
    GUICtrlSetState($idBtnDisconnect, $Gui_DISABLE)

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

    #Region;falls aktiviert Positionen noch anpasser und Labeltext entfernen
    Local $idLblColapsedTime = GUICtrlCreateLabel("", 8, 420, 400, 17)

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

    Local $idLblKBperSec = GUICtrlCreateLabel("", 450, 420, 500, 17)
    #EndRegion
    GUISetState(@SW_SHOW, $hGuiChild1)
    GUISetState(@SW_SHOW, $hGuiChild2)
    _GUIScrollBars_Init(GUICtrlGetHandle($idLblLog))
    GUISetState(@SW_SHOW, $mainGui)
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $Gui_EVENT_CLOSE, $idBtnExit
    If $l_InternetSession <> -99 Then _FTP_Close($l_InternetSession)
    Exit
    Case $idBtnConnect
    $l_InternetSession = _FTP_Open('AutoItZilla') ;Öffnet eine FTP Sitzung
    $errOpen = @error
    If Not @error Then
    _Report('Internetsitzung geöffnet',$hLog,1)
    $l_FTPSession = _FTP_Connect($l_InternetSession, $sServer, $sUser, $sPass, 0) ;Verbindet zu einem FTP Server
    $errFTP = @error
    If Not @error Then
    _Report('verbunden mit '&$sServer,$hLog,1)
    GUICtrlSetState($idBtnDL, $Gui_ENABLE)
    GUICtrlSetState($idBtnDisconnect, $Gui_ENABLE)
    GUICtrlSetState($idBtnConnect, $Gui_DISABLE)
    Else
    _Report('Verbindung mit '&$sServer & ' fehlgeschlagen: '& $errFTP,$hLog,1)
    EndIf
    Else
    _Report('öffnen der Internetsitzung fehlgeschlagen: ' & $errOpen,$hLog, 1)
    EndIf
    Case $idBtnDisconnect
    _FTP_Close($l_FTPSession)
    _Report('Ftpsitzung geschlossen',$hLog,1)
    _FTP_Close($l_InternetSession)
    _Report('Internetsitzung geschlossen',$hLog,1)
    $l_InternetSession = -99
    GUICtrlSetState($idBtnDL, $Gui_DISABLE)
    GUICtrlSetState($idBtnDisconnect, $Gui_DISABLE)
    GUICtrlSetState($idBtnConnect, $Gui_ENABLE)
    Case $idBtnDL
    $iMaxDepth=Int(GUICtrlRead($idInpMaxDepth))
    GUICtrlSetState($idBtnDL, $Gui_DISABLE)
    GUICtrlSetState($idBtnExit, $Gui_DISABLE)
    GUICtrlSetState($idBtnDisconnect, $Gui_DISABLE)
    _getAllFTPFilesRekursiv($l_FTPSession, '/', @ScriptDir & "\Temp", $iMaxDepth, 0, $idPrgKB, $idLblKB, $idLblKBPer, $idPrgFile, $idLblFile, $idLblFilePer, $idLblColapsedTime, $idLblKBperSec, $idLblLog) ;<======= anpassen Remotepfad der inkl. aller Unerordner heruntergeladen werden soll
    ;_getAllFTPFilesRekursiv($l_FTPSession, $sRemote = "", $sLocal = @TempDir, $iMaxDepth , $iDebug, $idPrgKB, $idLblKB, $idLblKBPer, $idPrgFile, $idLblFile, $idLblFilePer, $idLblColapsed = 0, $idLblKBperSec, $idLblLog)
    _Report('Download abgeschlossen',$hLog,1)
    _FTP_Close($l_FTPSession)
    _Report('Ftpsitzung geschlossen',$hLog,1)
    _FTP_Close($l_InternetSession)
    _Report('Internetsitzung geschlossen',$hLog,1)
    GUICtrlSetState($idBtnConnect, $Gui_ENABLE)
    ;Das Schliessen der Verbindung ist leider notwendig, da ansonsten der Progress in KB nicht funktioniert
    ; GUICtrlSetState($idBtnDL, $Gui_ENABLE)
    ; GUICtrlSetState($idBtnExit, $Gui_ENABLE)
    ; GUICtrlSetState($idBtnDisconnect, $Gui_ENABLE)
    EndSwitch
    WEnd
    EndFunc ;==>_CreateGui

    [/autoit]


    die nötigen Funktionen habe ich in FTP_FileList_Recursiv.au3 ausgelagert. Diese UDF beinhaltet:

    • _getAllFTPFilesRekursiv: lädt einen bestimmten Ordner inkl. aller Unterverzeichnisse herunter, die zu Downloadenden Dateien werden mit _FTP_FileList_Rekursiv2D ermittelt.
    • _createLocalDirIfNecessary prüft ob für eine Datei die lokale Verzeichnisstruktur besteht, falls nötig wird diese angelegt
    • _report wird benutzt um Meldungen in die Console bzw. ein Editfeld einzutragen.
    • _FTP_FileList_Rekursiv2D erhält alle nötigen Infos durch Aufruf von _FTP_FileList_Rekursiv und ermittelt die Gesamtgröße
    • _FTP_FileList_Rekursiv füllt ein Array mit Dateien (und Verzeichnissen wenn $bFolders true) des FTP-Pfades inkl. aller Unterverzeichnisse. Diese Funktion sammelt die Daten und wird von _FTP_FileList_Rekursiv2D aufgerufen. Sie kann aber auch einzeln aufgerufen werden.

    viel Spass mit der UDF für die das Beispiel ist,

    autoBert

  • ich glaube die IP ist falsch (ganz oben), muss doch eigentlich 127.0.0.1 heißen, also eine 0 mehr :P

    Dann habe ich mich wohl beim Einrichten meines lokalen FTP-Servers vertan. Jedenfalls funktioniert das Skript bei mir mit dieser Adresse.

  • Buphx: dann mußt Du erst einmal die IP 127.0.1 oder 127.0.0.1 formatieren, dann kommt Spaß auf. LOL

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl