Spoiler anzeigen
#include <FTPEx.au3>
#include <Array.au3>
$open = _FTP_Open("myftp")
$server = ""
$user = ""
$pass = ""
$FTPConnect = _FTP_Connect($open, $server, $user, $pass)
$Return_folders = _FTP_GetFilesFolder_Rekursiv($FTPConnect, "", 1)
_ArrayDisplay($Return_folders)
_FTP_Close($open)
; #FUNCTION#
;==================================================================================================
; Function Name: _FTP_GetFilesFolder_Rekursiv($FTPConnect, $Folder = "", $iDir = -1, $sExt = "*")
; Description: Rekursive Auflistung von Ordnern
; Parameter(s): $FTPConnect FTP Connection, wie sie von _FTP_Connect() zurückgegeben wird
; $sPath der Basispfad für die Auflistung ("" ist unterste Ebene)
; $sExt Erweiterung für Dateiauswahl "*" für alle (Standard)
; $iDir -1 Dateien+Ordner(Standard), 0 nur Dateien, 1 nur Ordner
; Return Value(s): Array mit den gefundenen Pfaden der Dateien und/oder Ordner
; Array[0] enthält die Anzahl der gefundenen Dateien/Ordner
; Author(s): TheLuBu ([email='LuBu@veytal.com'][/email])
; Modified.......:
; Remarks .......:
; Related .......: _FTPGetAllFolders
; Link ..........;
;
;==================================================================================================
Func _FTP_GetFilesFolder_Rekursiv($FTPConnect, $Folder = "", $iDir = -1, $sExt = "*")
Local $retarray[16777216], $list, $counter = 1
_FTPGetAllFolders($Folder)
Switch $iDir
Case -1, 0
For $i = 1 To UBound($RemoteFolderListResult) - 1
_FTP_DirSetCurrent($FTPConnect, $RemoteFolderListResult[$i])
If $iDir = -1 Then
$retarray[$counter] = $RemoteFolderListResult[$i]
$counter += 1
EndIf
$list = _FTP_ListToArray($FTPConnect, 2)
For $k = 1 To $list[0]
If $sExt <> '*' Then
If StringRight($list[$k], StringLen($sExt)) = $sExt Then
$retarray[$counter] = $RemoteFolderListResult[$i] & "/" & $list[$k]
$counter += 1
EndIf
Else
$retarray[$counter] = $RemoteFolderListResult[$i] & "/" & $list[$k]
$counter += 1
EndIf
Next
Next
$retarray[0] = $counter
ReDim $retarray[$counter + 1]
Return $retarray
Case 1
$retarray = $RemoteFolderListResult
$RemoteFolderListResult = ""
Return $retarray
EndSwitch
EndFunc ;==>_FTP_GetFilesFolder_Rekursiv
Func _FTPGetAllFolders($Folder = "")
If Not IsDeclared("RemoteFolderListResult") Then Global $RemoteFolderListResult[1]
Local $Check
If $Folder = "" Then
_FTP_DirSetCurrent($FTPConnect, "/")
Else
_FTP_DirSetCurrent($FTPConnect, $Folder)
EndIf
$FTPFolderList = _FTP_ListToArray($FTPConnect, 1)
_ArrayAdd($RemoteFolderListResult, _FTP_DirGetCurrent($FTPConnect))
If not IsArray($FTPFolderList) Or $FTPFolderList[0] = 0 Or ($FTPFolderList[0] = 2 AND $FTPFolderList[1] = "." AND $FTPFolderList[2] = "..") Then
$Check = False
While $Check = False
$t = StringLeft(_FTP_DirGetCurrent($FTPConnect), StringInStr(_FTP_DirGetCurrent($FTPConnect), "/", 0, -1) - 1)
_FTP_DirSetCurrent($FTPConnect, $t)
If $t = "" Then _FTP_DirSetCurrent($FTPConnect,"/")
$tmp_FTPFolderList = _FTP_ListToArray($FTPConnect, 1)
If @error Then $tmp_FTPFolderList = _FTP_ListToArray($FTPConnect, 1)
For $i = 1 To $tmp_FTPFolderList[0]
If $tmp_FTPFolderList[$i] = "." or $tmp_FTPFolderList[$i] = ".." Then ContinueLoop
If _ArraySearch($RemoteFolderListResult, _FTP_DirGetCurrent($FTPConnect) & "/" & $tmp_FTPFolderList[$i]) = -1 Then
$Check = True
ExitLoop
EndIf
Next
WEnd
Return 0
EndIf
For $Subfolder = 1 To $FTPFolderList[0]
If $FTPFolderList[$Subfolder] = "." or $FTPFolderList[$Subfolder] = ".." Then ContinueLoop
_FTPGetAllFolders(_FTP_DirGetCurrent($FTPConnect) & "/" & $FTPFolderList[$Subfolder])
Next
EndFunc ;==>_FTPGetAllFolders