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>
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)
#Region;falls aktiviert Positionen noch anpasser und Labeltext entfernen
Local $idLblColapsedTime = GUICtrlCreateLabel("", 8, 420, 400, 17)
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
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