#include-once
#include <FTPEx.au3>
#include <Array.au3>

;===============================================================================
; Function Name:	_FTP_FileList_Rekursiv($l_FTPSession, $aResult, $sPath, $bFolders, $iMaxDepth=-1, $iDepth=0)
; Description::		füllt ein Array mit Dateien (und Verzeichnissen wenn $bFolders true) des FTP-Pfades inkl. aller Unterverzeichnisse
; Parameter(s):   	$l_FTPSession	das von _FTP_Connect zurückgegebene Handle
; 					$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
;					$iMaxDepth		maximale Rekursionstiefe
;										<1 = unendlich als Degault eingestellt	optionale Angabe
;					$iDebug	sollen Debuginfos in der Scitekosole angezeigt werden? Default = 0 = keine, 1=mit, 2)mit + Arraydisplay
;					$iDepth für internen Gebrauch daher nicht selbst setzen
;
; Autor(s):			autoBert (www.autoit.de)
;
;					zur freien Benutzung in eigenen Skripten und auch zur freien Weitergabe unter der Vorgabe,
;					dass diese Funktionsbeschreibumg inkl. Autor nicht enfernt wird
;===============================================================================
Func _FTP_FileList_Rekursiv($l_FTPSession, ByRef $aResult, $sPath, $bFolders = False, $iMaxDepth = -1, $iDebug=0, $iDepth = 0)
	Local $aFiles, $aFolders
	$sPath=StringReplace($sPath,'//','/')
	If $iDebug Then ConsoleWrite($sPath & @TAB & $iDepth & '/' & $iMaxDepth & @CRLF)
	If $iMaxDepth > 0 Then
		If $iDepth > $iMaxDepth Then Return
	EndIf
	$iDepth += 1
	If $sPath <> "" Then
		_FTP_DirSetCurrent($l_FTPSession, $sPath)
		;if _FTP_DirGetCurrent($l_FTPSession) <> $sPath Then Exit
	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, StringReplace($sPath & "/" & $aFiles[$i], "//", "/"))
				If $iDebug Then ConsoleWrite("File: " & StringReplace($sPath & "/" & $aFiles[$i], "//", "/") & @CRLF)
			Next
		EndIf
	EndIf
	$aFolders = _Ftp_ListToArray($l_FTPSession, 1)
	If $iDebug > 1 Then _ArrayDisplay($aFolders)
	If IsArray($aFolders) Then
		If $aFolders[0] > 0 Then
			For $i = 1 To $aFolders[0]
				If $aFolders[$i] <> '.' And $aFolders[$i] <> '..' Then
					If $iDebug Then ConsoleWrite("Folder: " & StringReplace($sPath & "/" & $aFolders[$i] & "/", "//", "/") & @CRLF)
					If $bFolders Then _ArrayAdd($aResult, StringReplace($sPath & "/" & $aFolders[$i] & "/", "//", "/"))
					_FTP_FileList_Rekursiv($l_FTPSession, $aResult, $sPath & "/" & $aFolders[$i], $bFolders, $iMaxDepth, $iDebug, $iDepth)
				EndIf
			Next
		EndIf
	EndIf
	$aResult[0] = UBound($aResult) - 1
EndFunc   ;==>_FTP_FileList_Rekursiv

;===============================================================================
; Function Name:	_createLocalDirIfNecessary($s_LocalFile)
; Description::		prüft ob für eine Datei die lokale Verzeichnisstruktur besteht, falls nötig wird diese angelegt
; Parameter(s):		$s_LocalFile	Dateuname für den die Verzeichnisstruktur geprüft werden soll
; Autor(s):			AutoBert (www.autoit.de)
;					zur freien Benutzung in eigenen Skripten und auch zur freien Weitergabe unter der Vorgabe,
;					dass diese Funktionsbeschreibumg inkl. Autor nicht enfernt wird
;===============================================================================
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

