_FTP_GetFilesFolder_Rekursiv

  • _FTP_GetFilesFolder_Rekursiv
    [autoit]

    ; #FUNCTION#
    ;==================================================================================================
    ; Function Name: _FTP_GetFilesFolder_Rekursiv($oFTPConnect, $sFolder = "", $iDir = -1, $sExt = "*")
    ; Description: Rekursive Auflistung von Ordnern
    ; Parameter(s): $oFTPConnect FTP Connection, wie sie von _FTP_Connect() zurückgegeben wird
    ; $sFolder der Basispfad für die Auflistung ("" ist unterste Ebene)
    ; $iDir -1 Dateien+Ordner(Standard), 0 nur Dateien, 1 nur Ordner
    ; $sExt Erweiterung für Dateiauswahl "*" für alle (Standard)
    ; 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($oFTPConnect, $sFolder = "", $iDir = -1, $sExt = "*")
    Local $retarray[16777216], $list, $counter = 1
    Global $__RemoteFolderListResult[1]
    __FTPGetAllFolders($sFolder)
    Switch $iDir
    Case -1, 0
    For $i = 1 To UBound($__RemoteFolderListResult) - 1
    _FTP_DirSetCurrent($oFTPConnect, $__RemoteFolderListResult[$i])
    If $iDir = -1 Then
    $retarray[$counter] = $__RemoteFolderListResult[$i]
    $counter += 1
    EndIf
    $list = _FTP_ListToArray($oFTPConnect, 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

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

    Func __FTPGetAllFolders($oFTPConnect, $sFolder = "")
    If Not IsDeclared("RemoteFolderListResult") Then Global $__RemoteFolderListResult[1]
    Local $Check
    If $sFolder = "" Then
    _FTP_DirSetCurrent($oFTPConnect, "/")
    Else
    _FTP_DirSetCurrent($oFTPConnect, $sFolder)
    EndIf
    $FTPFolderList = _FTP_ListToArray($oFTPConnect, 1)
    _ArrayAdd($__RemoteFolderListResult, _FTP_DirGetCurrent($oFTPConnect))
    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($oFTPConnect), StringInStr(_FTP_DirGetCurrent($oFTPConnect), "/", 0, -1) - 1)
    _FTP_DirSetCurrent($oFTPConnect, $t)
    If $t = "" Then _FTP_DirSetCurrent($oFTPConnect,"/")
    $tmp_FTPFolderList = _FTP_ListToArray($oFTPConnect, 1)
    If @error Then $tmp_FTPFolderList = _FTP_ListToArray($oFTPConnect, 1)
    For $i = 1 To $tmp_FTPFolderList[0]
    If $tmp_FTPFolderList[$i] = "." or $tmp_FTPFolderList[$i] = ".." Then ContinueLoop
    If _ArraySearch($__RemoteFolderListResult, _FTP_DirGetCurrent($oFTPConnect) & "/" & $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($oFTPConnect) & "/" & $FTPFolderList[$Subfolder])
    Next
    EndFunc ;==>_FTPGetAllFolders

    [/autoit]

    Hier eine Funktion, die ich für einen anderen User geschrieben habe, vielleicht kann die ja jemand brauchen.
    Ihr könnt damit alle Dateien und/ oder Ordner auf einem Webspace anzeigen lassen.

    Feedback zu Bugs oder Änderungen ist erwünscht :)