_FileList*Path*ToArray

    • Offizieller Beitrag

    Hi,
    die Funktion _FileListToArray() gibt uns nur die Datei-/Ordnernamen zurück. Häufig benötigt man aber die kpl. Pfade.
    Deshalb habe ich diese Funktion erstellt, die identisch funktioniert aber die gesamten Pfade listet.
    Für rekursive Auflistung gibt es ja bereits genügend Lösungen.

    _FilePathListToArray
    [autoit]

    ;===============================================================================
    ; Function Name: _FilePathListToArray($sPath, $sFilter='*', $iFlag=0)
    ; Description: Analog zu _FileListToArray ==> aber es werden die kpl. Pfade ausgegeben
    ; Parameter(s): $sPath Pfad zum Ordner, von dem die Dateiliste erstellt werden soll
    ; $sFilter Dateiendung nach der gefiltert werden soll, Standard ist '*'
    ; $iFlag Rückgabe Dateien und/oder Ordner,
    ; 0 = Dateien u. Ordner (Standard)
    ; 1 = nur Dateien
    ; 2 = nur Ordner
    ; Return Value(s): Erfolg Array mit den Pfaden, $array[0] enthält die Anzahl der Dateien/Ordner
    ; Fehler 0 set @error 1 - Pfad existiert nicht
    ; 2 - Filter ungültig
    ; 3 - Flag ungültig
    ; 4 - keine Dateien/Ordner gefunden
    ; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
    ;===============================================================================
    Func _FilePathListToArray($sPath, $sFilter='*', $iFlag=0)
    Local $oFSO, $oFolder, $sOut = '', $iLen
    If Not FileExists($sPath) Then Return SetError(1,0,0)
    If StringRegExp($sFilter, "[\\/:><\|]|(?s)\A\s*\z") Then Return SetError(2,0,0)
    If Not StringInStr('0 1 2', $iFlag) Then Return SetError(3,0,0)
    $oFSO = ObjCreate('Scripting.FileSystemObject')
    $oFolder = $oFSO.GetFolder($sPath)
    If StringInStr('0 2', $iFlag) Then
    For $SubFolder In $oFolder.Subfolders
    $sOut &= $sPath & '\' & $SubFolder.Name & @LF
    Next
    EndIf
    If $iFlag < 2 Then
    $iLen = StringLen($sFilter)
    For $File In $oFolder.Files
    If $sFilter <> '*' Then
    If StringRight($File.Name, $iLen) <> $sFilter Then ContinueLoop
    EndIf
    $sOut &= $sPath & '\' & $File.Name & @LF
    Next
    EndIf
    If $sOut = '' Then Return SetError(4,0,0)
    Return StringSplit(StringTrimRight($sOut, 1), @LF)
    EndFunc ;==>_FilePathListToArray

    [/autoit]