Gesamten Ordner von FTP Server herunterladen

  • _FTP_DirPut_Contents
    [autoit]


    Func _FTP_DirPutContents($l_InternetSession, $s_LocalFolder, $s_RemoteFolder, $b_RecursivePut, $l_Context = 0)

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

    If StringRight($s_LocalFolder,1) == "\" Then $s_LocalFolder = StringTrimRight($s_LocalFolder,1)
    ; Shows the filenames of all files in the current directory.
    Local $search = FileFindFirstFile($s_LocalFolder & "\*.*")

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

    ; Check if the search was successful
    If $search = -1 Then Return SetError(1, 0, 0)

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

    Local $File
    While 1
    $File = FileFindNextFile($search)
    If @error Then ExitLoop
    If StringInStr(FileGetAttrib($s_LocalFolder & "\" & $File), "D") Then
    _FTP_DirCreate($l_InternetSession, $s_RemoteFolder & "/" & $File)
    If $b_RecursivePut Then
    _FTP_DirPutContents($l_InternetSession, $s_LocalFolder & "\" & $File, $s_RemoteFolder & "/" & $File, $b_RecursivePut, $l_Context)
    EndIf
    Else
    _FTP_FilePut($l_InternetSession, $s_LocalFolder & "\" & $File, $s_RemoteFolder & "/" & $File, 0, $l_Context)
    EndIf
    WEnd

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

    ; Close the search handle
    FileClose($search)
    Return 1
    EndFunc ;==>_FTP_DirPutContents

    [/autoit]

    Das ist die Funktion, die den Ordner hochlädt.
    Eigentlich kannst du diese fast übernehmen, du musst allerdings die (rekursive) Dateisuche natürlich mit den vom Namen her ähnlichen FTP-Funktionen auf dem FTP-Server durchführen, und "FilePut" und verwandte Befehle durch entsprechendes FileGet o.ä. ersetzen.

    Gruß stay

    Einmal editiert, zuletzt von stayawayknight (25. März 2012 um 12:46)

  • Oder einfach so ?

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    #include <FTPEx.au3>
    #Include <Array.au3>

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

    If Not FileExists (@ScriptDir & "\Temp") Then DirCreate (@ScriptDir & "\Temp")

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

    $Zielpfad = @ScriptDir & "\Temp\"

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

    $server = 'ip'
    $user = 'user'
    $pw = 'pw'
    $pasv = 1
    $port = 0 ; 0 für port 21

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

    $path = '/Ordnername'

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

    $Open = _FTP_Open('server')
    $conn = _FTP_Connect($open, $server, $user, $pw , $pasv , $port)

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

    $setdir = _Ftp_DirSetCurrent($Conn, $path)
    if $setdir = 0 Then
    MsgBox(0, "Fehler", "Konnte nicht zu Verzeichnis " & $path & " wechseln !")
    _FTP_Close($Open)
    Exit
    EndIf

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

    $files = _FTP_ListToArray($conn, 2)
    if $files = 0 Then
    msgbox(0, "Fehler", "Keine Dateien im Verzeichnis " & $path & " vorhanden ! ")
    _FTP_Close($Open)
    Exit
    EndIf

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

    _ArrayDisplay($files)

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

    for $i = 1 to $files[0]
    _FTP_FileGet($conn, $files[$i], $zielpfad & $files[$i])
    Next

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

    _FTP_Close($Open)

    [/autoit]

    2 Mal editiert, zuletzt von baar (29. März 2012 um 01:38)


  • Dankeschön erstmal, aber ich habe noch eine Frage:
    Ich weiß nicht ob sich jemand mit Minecraft Bukkit auskennt, auf jedenfall ist es so, dass du einen plugins Ordner hast und wenn jemand ein neues plugin installiert, das dies dann auch manchmal einen ordner erstellt, das soll das Tool erkennen und diesen Ordner auch gleich mit runterladen, wie könnte man das anstellen?
    EDIT: Kann man es auch irgendwie hinkriegen, dass er kein Fenster mehr öffnet sondern automatisch alles runterlädt?

  • Hallo Fliwatt,

    Ich weiß nicht ob sich jemand mit Minecraft Bukkit auskennt, auf jedenfall ist es so, dass du einen plugins Ordner hast und wenn jemand ein neues plugin installiert, das dies dann auch manchmal einen ordner erstellt, das soll das Tool erkennen und diesen Ordner auch gleich mit runterladen, wie könnte man das anstellen?

    mit einer rekursiven Ornderauflistung, schau dir dazu mein Beispiel in [ offen ] FTP Server inhalt auslesen an.

    EDIT: Kann man es auch irgendwie hinkriegen, dass er kein Fenster mehr öffnet sondern automatisch alles runterlädt?

    Versuche es doch einfach,

    mfg autoBert

  • He Autobert,
    ich habe mir mal deinen Script angeschaut und bei mir hat er sich nach 2 Minuten mit dieser Fehlermeldung wieder geschlossen:

    Spoiler anzeigen
    Code
    D:\Extras\Programmieren\AUTOIT\test.au3 (53) : ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:
    For $i = 1 To $aFolders[0][0]
    For $i = 1 To ^ ERROR


    Und ich habe mal ein bischen improvisiert(ich habe noch nie mit Arrays gearbeitet...) und habe das _ArrayDisplay mit _ArraySort ersetzt, aber irgendwie lädt er immernoch keine Dateien runter, die Array bleibt leer...

    Spoiler anzeigen
    [autoit]


    $Zielpfad = $folder & "\" & $worldname
    $path = $worldname
    $setdir = _Ftp_DirSetCurrent($hFTPConn, $path)
    if $setdir = 0 Then
    MsgBox(0, "Fehler", "Konnte nicht zu Verzeichnis " & $path & " wechseln !")
    _FTP_Close($hFTPOpen)
    Exit
    EndIf
    $files = _FTP_ListToArray($hFTPConn, 2)
    if $files = 0 Then
    msgbox(0, "Fehler", "Keine Dateien im Verzeichnis " & $path & " vorhanden ! ")
    _FTP_Close($hFTPOpen)
    Exit
    EndIf

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

    _ArraySort($files)
    for $i = 1 to $files[0]
    _FTP_FileGet($hFTPConn, $files[$i], $zielpfad & $files[$i])
    Next

    [/autoit]


    Mfg Fliwatt
    P.S. Die FTP Connection Daten stimmen, ich kann damit ohne Probleme einzelne Dateien laden.

  • Hallo Fliwatt,

    Dann teste eunmal dieses Skript:

    Spoiler anzeigen
    [autoit]

    #AutoIt3Wrapper_Au3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
    #include <FTPEx.au3>
    #include <Array.au3>

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

    Opt('MustDeclareVars', 1)

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

    Global $l_FTPSession
    _example()

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

    Func _example()
    Local $aResult[1]
    Local $s_ServerName = 'ftp.csx.cam.ac.uk' ;das ist ein real existierender Server
    Local $s_Username = ''
    Local $s_Password = ''
    Local $i_Passive = 0 ;aktive Verbindung nutzen wenn bei anderen Server Probleme dann auch mit 1 für passive Verbung testen
    Local $sLocal = @ScriptDir & "\_FTP_FileList_RekursivTEST" ;<======= anpassen Pfad in dem die heruntergeladenen Dateien gespeochert werden
    Local $errOpen, $errFTP
    Local $s_LocalFile
    Local $iStart = TimerInit(), $iEnd ;kann auskommenteirt werden
    ToolTip('Please wait...') ;kann auskommenteirt werden

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

    Local $l_InternetSession = _FTP_Open('AuoItZilla') ;Öffnet eine FTP Sitzung
    $errOpen = @error
    If Not @error Then
    $l_FTPSession = _FTP_Connect($l_InternetSession, $s_ServerName, $s_Username, $s_Password, $i_Passive) ;Verbindet zu einem FTP Server
    $errFTP = @error
    If Not @error Then
    _FTP_FileList_Rekursiv($aResult, "/pub/") ;<======= anpassen Remotepfad der inkl. aller Unerordner heruntergeladen werden soll
    _ArrayDisplay($aResult) ;kann auskommenteirt werden
    ToolTip('') ;kann auskommenteirt werden
    $iEnd = TimerDiff($iStart) ;kann auskommenteirt werden
    MsgBox(0, "Zeit für Verzeichnisinformationen:", $iEnd, 5) ;kann auskommenteirt werden
    For $i = 1 To $aResult[0]
    $s_LocalFile = $sLocal & "\" & StringTrimLeft($aResult[$i], 1)
    $s_LocalFile = StringReplace($s_LocalFile, "/", "\")
    _createLocalDirIfNecessary($s_LocalFile)
    ConsoleWrite("Download: " & $aResult[$i] & @TAB)
    ;#cs
    If _FTP_FileGet($l_FTPSession, $aResult[$i], $s_LocalFile) Then
    ConsoleWrite("erfolgreich " & @CRLF)
    Else
    ConsoleWrite("fehlgeschlagen " & @error & @CRLF)
    EndIf
    ;#ce
    Next
    Else
    ;MsgBox(0, "Connect", "fehlgeschlagen")
    ConsoleWrite("Connect: " & " " & $errFTP & @CRLF)
    EndIf
    Else
    ;MsgBox(0, "Open", "fehlgeschlagen")
    ConsoleWrite("Open " & " " & $errOpen & @CRLF)
    EndIf
    _FTP_Close($l_InternetSession)
    EndFunc ;==>_example

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

    ;===============================================================================
    ; Function Name: _createLocalDirIfNecessary($s_LocalFile)
    ; Description:: prüft ob für eine Datei die Verzeichnisstruktur besteht, falls nötig wird diese angelegt
    ; Parameter(s): $s_LocalFile Dateuname für den die Verzeichnisstruktur geprüft werden soll
    ; Author(s): AutoBert (http://www.autoit.de)
    ;===============================================================================
    Func _createLocalDirIfNecessary($s_LocalFile)
    Local $aLocalPath = StringSplit($s_LocalFile, "\") ;hier lokale Pfad erstellen falls notwendig
    Local $sLocalPath = ""
    For $j = 1 To $aLocalPath[0] - 1
    $sLocalPath &= $aLocalPath[$j] & "\"
    If Not FileExists($sLocalPath) And Not StringInStr($aLocalPath[$j], ":") Then
    ;ConsoleWrite($sLocalPath & @CRLF)
    DirCreate($sLocalPath)
    EndIf
    Next
    EndFunc ;==>_createLocalDirIfNecessary

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

    ;===============================================================================
    ; Function Name: _FTP_FileList_Rekursiv($aResult, $sPath, $bFolders)
    ; Description:: füllt ein Array mit Dateien (und Verzeichnissen wenn $bFolders true) des FTP-Pfades inkl. aller Unterverzeichnisse
    ; Parameter(s): $aResult = das Array in dem die Ergebnisse eingefügt werden
    ; $sPath = Verzeichnispfad, der eingefügt werden soll
    ; $bFolders = True = auch Verzeichnisse einfügen, False = nur Dateien, Default = nur Dateien
    ; Author(s): AutoBert (http://www.autoit.de)
    ;===============================================================================
    Func _FTP_FileList_Rekursiv(ByRef $aResult, $sPath, $bFolders = False)
    Local $aFiles, $aFolders
    If $sPath <> "" Then
    _FTP_DirSetCurrent($l_FTPSession, $sPath)
    $sPath = _FTP_DirGetCurrent($l_FTPSession)
    EndIf
    $aFolders = _Ftp_ListToArray($l_FTPSession, 1)
    ;_ArrayDisplay($aFolders)
    If IsArray($aFolders) Then
    If $aFolders[0] > 0 Then
    For $i = 1 To $aFolders[0]
    If $aFolders[$i] <> '.' And $aFolders[$i] <> '..' Then
    ConsoleWrite($sPath & "/" & $aFolders[$i] & @CRLF)
    If $bFolders Then _ArrayAdd($aResult, $sPath & "/" & $aFolders[$i])
    _FTP_FileList_Rekursiv($aResult, $sPath & "/" & $aFolders[$i], $bFolders)
    EndIf
    Next
    EndIf
    EndIf
    $aFiles = _Ftp_ListToArray2D($l_FTPSession, 2)
    If IsArray($aFiles) Then
    ;_ArrayDisplay($aFiles)
    If $aFiles[0][0] > 0 Then
    For $i = 1 To $aFiles[0][0]
    _ArrayAdd($aResult, $sPath & "/" & $aFiles[$i][0])
    ConsoleWrite($sPath & "/" & $aFiles[$i][0] & @CRLF)
    Next
    EndIf
    EndIf
    $aResult[0] = UBound($aResult) - 1
    EndFunc ;==>_FTP_FileList_Rekursiv

    [/autoit]

    mfg autoBert

  • Und schon wieder das selbe Spielchen, ich habe es erst mit dem im Script angegebenen Server probiert, dann mit meinem, er gibt immer den gleichen Error aus:

    Spoiler anzeigen


    Mfg Fliwatt

  • Also wenn ich dich richtig verstanden habe, willst du bis jetzt immer noch nur einen bestimmten ordner vom einem FTP-Server herunterladen ?

    dafür musst du einfach dieses script ausführen, und diese Variable mit dem kompletten Ordnerpfad ersetzen -> $path = '/Ordnername' z.b so $path = '/ordner1/minecraft'

    bitte erstmal nichts anderes ändern wie z.b das arraydisplay mit arraysort auswechseln ! Denn das arraydisplay ist nur zur überprüfung da, damit man sieht welche Dateien er herunter lädt.

    Probier das bitte nochmal aus und wechsel wie gesagt nur die path Variable. ( Und natürlich die FTP-Daten :D )

    Spoiler anzeigen
    [autoit]


    #include <FTPEx.au3>
    #Include <Array.au3>

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

    If Not FileExists (@ScriptDir & "\Temp") Then DirCreate (@ScriptDir & "\Temp")

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

    $Zielpfad = @ScriptDir & "\Temp\"

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

    $server = 'ip'
    $user = 'user'
    $pw = 'pw'
    $pasv = 1
    $port = 0 ; 0 für port 21

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

    $path = '/Ordnername'

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

    $Open = _FTP_Open('server')
    $conn = _FTP_Connect($open, $server, $user, $pw , $pasv , $port)

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

    $setdir = _Ftp_DirSetCurrent($Conn, $path)
    if $setdir = 0 Then
    MsgBox(0, "Fehler", "Konnte nicht zu Verzeichnis " & $path & " wechseln !")
    _FTP_Close($Open)
    Exit
    EndIf

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

    $files = _FTP_ListToArray($conn, 2)
    if $files = 0 Then
    msgbox(0, "Fehler", "Keine Dateien im Verzeichnis " & $path & " vorhanden ! ")
    _FTP_Close($Open)
    Exit
    EndIf

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

    _ArrayDisplay($files)

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

    for $i = 1 to $files[0]
    _FTP_FileGet($conn, $files[$i], $zielpfad & $files[$i])
    Next

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

    _FTP_Close($Open)

    [/autoit]


    danach mal in den Ordner schauen in dem du das Script ausgeführt hast, dort sollte dann ein Ordner Temp sein, indem die heruntergeladenen Dateien sind.

  • Und schon wieder das selbe Spielchen, ich habe es erst mit dem im Script angegebenen Server probiert, dann mit meinem, er gibt immer den gleichen Error aus:


    Bei dem öffentlichen Server kann dies nicht sein. Ich habe das Skript unter AutoIt 3.3.6.1 getestet und es läuft einwandfrei durch. Bei deiner Kosnoslenausgabe handelt es sich um deinen Server, poste doch bitte einmal due Konsolenausgabe wenn du das Skript im Originalzustand laufen lässt.
    Bei wem hast du deinen FTP-Server? Die Rückgabe "//MySQLAdmin" komm mir seltsam vor und sollte laut Skript eigentlich nicht vorkommen sondern "/MySQLAdmin" lauten.

    @baar: dein Skript sollte natürlich laufen (habe es nicht getestet) aber es berücksichtigt keine Unterordner, die ja auch mit heruntergeladen werden sollen.
    Edit: das Skript läuft für den öffentlichen Server habe ich es mit diesen Daten getestet:

    [autoit]

    $server = 'ftp.csx.cam.ac.uk'
    $user = ''
    $pw = ''
    $pasv = 0
    $port = 0 ; 0 für port 21

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

    $path = '/pub/information/courses/perl'

    [/autoit]

    @all: Kann jemand mit der aktuellen 3.3.8.1 AutoIt mein Skript testen? Denn dann hätte diese einen Bug bei der Func: IfIsArray, was ich mir aber auch nicht vorstellen kann,

    mfg AutoBert

    mfg autoBert

    Einmal editiert, zuletzt von autoBert (6. April 2012 um 14:59)

  • autoBert es ist doch nicht der selbe Error, aber ein Error:
    (Script Aus Beitrag 10 verwendet, unverändert Copy & Paste)

    Spoiler anzeigen


    Mfg Fliwatt

  • Hallo Flowatt,

    ich verstehe nicht warum das Skript unter 3.3.8.1 Probleme macht unter 3.3.6.1 läuft es durch, ich habe jetzt noch eimal abgeändert, da lt. deiner Konsolenausgabe die Probleme nur bei der Rückgabe von

    [autoit]

    _Ftp_ListToArray2D

    [/autoit]

    vorkammen, habe ich es jetzt auch bei Dateien durch

    [autoit]

    _Ftp_ListToArray

    [/autoit]

    ersetzt: Hier meine Konsolenausgabe bis zum Abbruch:

    Spoiler anzeigen

    Und hier das Skript:

    Spoiler anzeigen
    [autoit]

    #AutoIt3Wrapper_Au3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
    #include <FTPEx.au3>
    #include <Array.au3>

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

    Opt('MustDeclareVars', 1)

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

    Global $l_FTPSession
    _example()

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

    Func _example()
    Local $aResult[1]
    Local $s_ServerName = 'ftp.csx.cam.ac.uk' ;das ist ein real existierender Server
    Local $s_Usersname = ''
    Local $s_Password = ''
    Local $i_Passive = 0 ;aktive Verbindung nutzen wenn bei anderen Server Probleme dann auch mit 1 für passive Verbung testen
    Local $sLocal = @ScriptDir & "\_FTP_FileList_RekursivTEST" ;<======= anpassen Pfad in dem die heruntergeladenen Dateien gespeochert werden
    Local $errOpen, $errFTP
    Local $s_LocalFile
    Local $iStart = TimerInit(), $iEnd ;kann auskommenteirt werden
    ToolTip('Please wait...') ;kann auskommenteirt werden

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

    Local $l_InternetSession = _FTP_Open('AuoItZilla') ;Öffnet eine FTP Sitzung
    $errOpen = @error
    If Not @error Then
    $l_FTPSession = _FTP_Connect($l_InternetSession, $s_ServerName, $s_Usersname, $s_Password, $i_Passive) ;Verbindet zu einem FTP Server
    $errFTP = @error
    If Not @error Then
    _FTP_FileList_Rekursiv($aResult, "/pub/") ;<======= anpassen Remotepfad der inkl. aller Unerordner heruntergeladen werden soll
    If $aResult[0] > 0 Then
    _ArrayDisplay($aResult) ;kann auskommenteirt werden
    ToolTip('') ;kann auskommenteirt werden
    $iEnd = TimerDiff($iStart) ;kann auskommenteirt werden
    MsgBox(0, "Zeit für Verzeichnisinformationen:", $iEnd, 5) ;kann auskommenteirt werden
    For $i = 1 To $aResult[0]
    $s_LocalFile = $sLocal & "\" & StringTrimLeft($aResult[$i], 1)
    $s_LocalFile = StringReplace($s_LocalFile, "/", "\")
    _createLocalDirIfNecessary($s_LocalFile)
    ConsoleWrite("Download: " & $aResult[$i] & @TAB)
    ;#cs
    If _FTP_FileGet($l_FTPSession, $aResult[$i], $s_LocalFile) Then
    ConsoleWrite("erfolgreich ")
    Else
    ConsoleWrite("fehlgeschlagen " & @error)
    EndIf
    ;#ce
    ConsoleWrite(@CRLF)
    Next
    Else
    ConsoleWrite("Keine Dateien zum Herunterladen gefunden" & @CRLF)
    EndIf
    Else
    ;MsgBox(0, "Connect", "fehlgeschlagen")
    ConsoleWrite("Connect: " & " " & $errFTP & @CRLF)
    EndIf
    Else
    ;MsgBox(0, "Open", "fehlgeschlagen")
    ConsoleWrite("Open " & " " & $errOpen & @CRLF)
    EndIf
    _FTP_Close($l_InternetSession)
    EndFunc ;==>_example

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

    ;===============================================================================
    ; Function Name: _createLocalDirIfNecessary($s_LocalFile)
    ; Description:: prüft ob für eine Datei die Verzeichnisstruktur besteht, falls nötig wird diese angelegt
    ; Parameter(s): $s_LocalFile Dateuname für den die Verzeichnisstruktur geprüft werden soll
    ; Author(s): AutoBert (http://www.autoit.de)
    ;===============================================================================
    Func _createLocalDirIfNecessary($s_LocalFile)
    Local $aLocalPath = StringSplit($s_LocalFile, "\") ;hier lokale Pfad erstellen falls notwendig
    Local $sLocalPath = ""
    For $j = 1 To $aLocalPath[0] - 1
    $sLocalPath &= $aLocalPath[$j] & "\"
    If Not FileExists($sLocalPath) And Not StringInStr($aLocalPath[$j], ":") Then
    ;ConsoleWrite($sLocalPath & @CRLF)
    DirCreate($sLocalPath)
    EndIf
    Next
    EndFunc ;==>_createLocalDirIfNecessary

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

    ;===============================================================================
    ; Function Name: _FTP_FileList_Rekursiv($aResult, $sPath, $bFolders)
    ; Description:: füllt ein Array mit Dateien (und Verzeichnissen wenn $bFolders true) des FTP-Pfades inkl. aller Unterverzeichnisse
    ; Parameter(s): $aResult = das Array in dem die Ergebnisse eingefügt werden
    ; $sPath = Verzeichnispfad, der eingefügt werden soll
    ; $bFolders = True = auch Verzeichnisse einfügen, False = nur Dateien, Default = nur Dateien
    ; Author(s): AutoBert (http://www.autoit.de)
    ;===============================================================================
    Func _FTP_FileList_Rekursiv(ByRef $aResult, $sPath, $bFolders = False)
    Local $aFiles, $aFolders
    If $sPath <> "" Then
    _FTP_DirSetCurrent($l_FTPSession, $sPath)
    $sPath = _FTP_DirGetCurrent($l_FTPSession)
    EndIf
    $aFolders = _Ftp_ListToArray($l_FTPSession, 1)
    ;_ArrayDisplay($aFolders)
    If IsArray($aFolders) Then
    If $aFolders[0] > 0 Then
    For $i = 1 To $aFolders[0]
    If $aFolders[$i] <> '.' And $aFolders[$i] <> '..' Then
    ConsoleWrite("Folder: " & $sPath & "/" & $aFolders[$i] & @CRLF)
    If $bFolders Then _ArrayAdd($aResult, $sPath & "/" & $aFolders[$i])
    _FTP_FileList_Rekursiv($aResult, $sPath & "/" & $aFolders[$i], $bFolders)
    EndIf
    Next
    EndIf
    EndIf
    $aFiles = _Ftp_ListToArray($l_FTPSession, 2)
    If IsArray($aFiles) Then
    ;_ArrayDisplay($aFiles)
    If $aFiles[0] > 0 Then
    For $i = 1 To $aFiles[0]
    _ArrayAdd($aResult, $sPath & "/" & $aFiles[$i])
    ConsoleWrite("File: " & $sPath & "/" & $aFiles[$i] & @CRLF)
    Next
    EndIf
    EndIf
    $aResult[0] = UBound($aResult) - 1
    EndFunc ;==>_FTP_FileList_Rekursiv

    [/autoit]

    mfg autoBert

  • Ok, der Script den du mir jetzt gegeben hast scheint zu funktionieren, jedoch bricht er manchmal beim Download ab:

    Spoiler anzeigen


    EDIT: Es hat bei dir ja auch "geerrort"

  • Danke AutoBert,
    habe den Script ein bischen meinen Bedürfnissen angepasst, er gibt zwar immer noch Error aus aber komischerweise für Dateien die gar nicht in dem Pfad auf dem Ordner existieren, aber er lädt alles runter, das ist die Hauptsache.
    PROBLEM GELÖST.
    Mfg Fliwatt


    Für dich ist das Problem vielleicht zufällig gelöst, aber die Routine _FTP_FileList_Rekursiv ist fehlerhaft zu sein (da sie Dateien einem falschen Ordner zuordnet) deshalb rate ich von einer Verwendung ab.
    Kannst du es einmal mit dieser Version von _FTP_FileList_Rekursiv:

    Spoiler anzeigen
    [autoit]

    ;===============================================================================
    ; Function Name: _FTP_FileList_Rekursiv($aResult, $sPath, $bFolders)
    ; Description:: füllt ein Array mit Dateien (und Verzeichnissen wenn $bFolders true) des FTP-Pfades inkl. aller Unterverzeichnisse
    ; Parameter(s): $aResult = das Array in dem die Ergebnisse eingefügt werden
    ; $sPath = Verzeichnispfad, der eingefügt werden soll
    ; $bFolders = True = auch Verzeichnisse einfügen, False = nur Dateien, Default = nur Dateien
    ; Author(s): AutoBert (http://www.autoit.de)
    ;===============================================================================
    Func _FTP_FileList_Rekursiv(ByRef $aResult, $sPath, $bFolders = False)
    Local $aFiles, $aFolders
    If $sPath <> "" Then
    _FTP_DirSetCurrent($l_FTPSession, $sPath)
    $sPath = _FTP_DirGetCurrent($l_FTPSession)
    EndIf
    $aFiles = _Ftp_ListToArray($l_FTPSession, 2)
    If IsArray($aFiles) Then
    ;_ArrayDisplay($aFiles)
    If $aFiles[0] > 0 Then
    For $i = 1 To $aFiles[0]
    _ArrayAdd($aResult, $sPath & "/" & $aFiles[$i])
    ConsoleWrite("File: " & $sPath & "/" & $aFiles[$i] & @CRLF)
    Next
    EndIf
    EndIf
    $aFolders = _Ftp_ListToArray($l_FTPSession, 1)
    ;_ArrayDisplay($aFolders)
    If IsArray($aFolders) Then
    If $aFolders[0] > 0 Then
    For $i = 1 To $aFolders[0]
    If $aFolders[$i] <> '.' And $aFolders[$i] <> '..' Then
    ConsoleWrite("Folder: " & $sPath & "/" & $aFolders[$i] & @CRLF)
    If $bFolders Then _ArrayAdd($aResult, $sPath & "/" & $aFolders[$i])
    _FTP_FileList_Rekursiv($aResult, $sPath & "/" & $aFolders[$i], $bFolders)
    EndIf
    Next
    EndIf
    EndIf
    $aResult[0] = UBound($aResult) - 1
    EndFunc ;==>_FTP_FileList_Rekursiv

    [/autoit]

    versuchen? Bis ich mit meinem langsamen web'n'walk Zugang einen vollständigen Test hinbekomme das kann dauern,

    mfg autoBert