UDF > File >


_FileListToArrayRec

Obtient les fichiers et/ou les sous-répertoires d'un répertoire avec en option une récursivité de profondeur donnée et un résultat trié

#include <File.au3>
_FileListToArrayRec ( $sFilePath [, $sMask = "*" [, $iReturn = $FLTAR_FILESFOLDERS [, $iRecur = $FLTAR_NORECUR [, $iSort = $FLTAR_NOSORT [, $iReturnPath = $FLTAR_RELPATH]]]]] )

Paramètres

$sFilePath Répertoire initial utilisé pour générer la liste des fichiers.
Si le chemin se termine par '\' alors les répertoires seront retournés avec '\' à la fin.
Si la longueur du chemin > 260 caractères, le chemin sera préfixé par "\\?\" - les chemins retournés ne seront pas affectés
$sMask [optionnel] Filtre pour le résultat. Plusieurs filtres doivent être séparées par ";"
Utilisez "|" pour séparer les 3 définitions possibles de filtres : "Include|Exclude|Exclude_Folders"
    Include = Fichiers/Répertoires à inclure (par défaut = "*" [tous])
    Exclude = Fichiers/Répertoires à exclure (par défaut = "" [aucun])
    Exclude_Folders = uniquement utilisé si $iRecur = 1 AND $iReturn <> 2 pour exclure des répertoires définis (par défaut = "" [aucun])
$iReturn [optionnel] Spécifie s'il faut retourner les fichiers, les répertoires ou les deux et omettre ceux qui ont certains attributs
    $FLTAR_FILESFOLDERS (0) - (par défaut) Retourne à la fois les fichiers et les répertoires
    $FLTAR_FILES (1) - Retourne uniquement les fichiers
    $FLTAR_FOLDERS (2) - Retourne uniquement les répertoires
Ajoute un ou plusieurs des éléments suivants à $iReturn pour omettre les fichiers/répertoires avec des attributs donnés
    + $FLTAR_NOHIDDEN (4) - fichiers et répertoires cachés
    + $FLTAR_NOSYSTEM (8) - fichiers et répertoires système
    + $FLTAR_NOLINK (16) - répertoires liés/joints
$iRecur [optionnel] Indique si la recherche sera récursive dans les sous-répertoires et jusqu'à quel niveau de profondeur
    $FLTAR_NORECUR (0) - Ne recherche pas dans les sous-répertoires (par défaut)
    $FLTAR_RECUR (1) - Recherche dans tous les sous-répertoires (récursivité illimitée)
Entier négatif - Recherche dans les sous-répertoires de profondeur spécifiée
$iSort [optionnel] Trie les résultats par ordre alphabétique et par profondeur
    $FLTAR_NOSORT (0) - Pas de tri (par défaut)
    $FLTAR_SORT (1) - Avec tri
    $FLTAR_FASTSORT (2) - Tri avec l'algorithme le plus rapide (ce qui suppose que les fichiers dans les répertoires sont retournés triés - nécessite NTFS et ce n'est pas garanti)
$iReturnPath [optionnel] Indique le chemin d'affichage des résultats:
    $FLTAR_NOPATH (0) - Uniquement le nom des fichiers/répertoires
    $FLTAR_RELPATH (1) - Relativement au chemin initial (par défaut)
    $FLTAR_FULLPATH (2) - Chemin complet inclus

Valeur de retour

Succès: Retourne un tableau de dimension 1 constitué comme il suit:
    [0] = Nombre de Fichiers/Répertoires retournés
    [1] = 1er Fichier/Répertoire
    [2] = 2e Fichier/Répertoire
    ...
    [n] = n-ième Fichier/Répertoire
Échec: Retourne une chaîne vide, @error = 1 et @extended comme ci-dessous:
    1 - Chemin introuvable ou non valide
    2 - Paramètre Include non valide
    3 - Paramètre Exclude non valide
    4 - Paramètre Exclude_Folders non valide
    5 - Paramètre $iReturn non valide
    6 - Paramètre $iRecur non valide
    7 - Paramètre $iSort non valide
    8 - Paramètre $iReturnPath non valide
    9 - Aucun Fichier/Répertoire trouvé

Remarques

Si les fichiers et/ou répertoires à retourner sont tous dans le même répertoire et sont définis par un seul filtre simple, la fonction _FileListToArray() a des chances d'être beaucoup plus rapide.

Logique de Inclure/Exclure/Exclude_Folders:
    -Recherche non-récursive:
        Inclure/Exclure: Fichiers et/ou répertoires
        Exclude_Folders: Ignorés
    -Recherche récursive:
        Inclure/Exclure:
            $iReturn = $FLTAR_FILESFOLDERS/$FLTAR_FILES - Uniquement les fichiers
            $iReturn = $FLTAR_FOLDERS - Uniquement les répertoires
        Exclude_Folders :
            $iReturn = $FLTAR_FILESFOLDERS/$FLTAR_FILES - Uniquement les répertoires
            $iReturn = $FLTAR_FOLDERS - Ignoré

Le tri des résultats augmentera de façon significative le temps nécessaire à la fonction pour retourner un tableau

Malgré son nom, cette fonction est itérative, pas récursive. Les constantes sont définies dans FileConstants.au3

En relation

_FileListToArray

Exemple

#include <Array.au3>
#include <File.au3>
#include <MsgBoxConstants.au3>

Example()

Func Example()
    Local $sAutoItDir = StringLeft(@AutoItExe, StringInStr(@AutoItExe, "\", Default, -1))
    If StringRight($sAutoItDir, 5) = "beta\" Then
        $sAutoItDir = StringTrimRight($sAutoItDir, 5)
    EndIf
    ConsoleWrite($sAutoItDir & @CRLF)

    ; Une liste triée de tous les fichiers et répertoires dans le dossier de l'installation AutoIt
    Local $aArray = _FileListToArrayRec($sAutoItDir, "*", $FLTAR_FILESFOLDERS, $FLTAR_RECUR, $FLTAR_SORT)
    _ArrayDisplay($aArray, "Arbre trié")

    ; Et maintenant, en ignorant le "Inclure" des répertoires
    $aArray = _FileListToArrayRec($sAutoItDir, "*||include", $FLTAR_FILESFOLDERS, $FLTAR_RECUR, $FLTAR_SORT)
    _ArrayDisplay($aArray, "Pas de répertoire 'Include'")

    ; Une liste triée de tout, mais les fichiers .exe dans le dossier \AutoIt3
    $aArray = _FileListToArrayRec($sAutoItDir, "*|*.exe", $FLTAR_FILES, $FLTAR_NORECUR, $FLTAR_SORT)
    _ArrayDisplay($aArray, "Pas de fichier .EXE")

    ; Et voici les fichiers .exe que nous avons laissés ci-dessus
    $aArray = _FileListToArrayRec($sAutoItDir, "*.exe", $FLTAR_FILES)
    _ArrayDisplay($aArray, "Fichiers .EXE")

    ; Un test pour tous les répertoires et les fichiers .exe dans l'arbre des répertoires, en omettant les répertoires commençant par I (Icons et Include)
    $aArray = _FileListToArrayRec($sAutoItDir, "*.exe||i*", $FLTAR_FILESFOLDERS, $FLTAR_RECUR, $FLTAR_SORT)
    _ArrayDisplay($aArray, "Recursivité avec filtre")

    ; Regardons les fichiers d'icônes - mais excluons le répertoire "Icons"
    $aArray = _FileListToArrayRec($sAutoItDir, "*.ico||ic*", $FLTAR_FILES, $FLTAR_RECUR, $FLTAR_SORT)
    If @error Then
        MsgBox($MB_SYSTEMMODAL, "Ooops!", "Pas de fichier ico trouvé")
    Else
        _ArrayDisplay($aArray, "Fichiers ico qui ne sont pas dans le dossier 'Icons'")
    EndIf

    ; Et pour montrer que le filtre s'applique aux fichiers ET aux répertoires quand non récursive
    $aArray = _FileListToArrayRec($sAutoItDir, "*.exe", $FLTAR_FILESFOLDERS, $FLTAR_NORECUR, $FLTAR_SORT)
    _ArrayDisplay($aArray, "Pas de récursivité avec filtre")

    ; Le filtre s'applique également aux répertoires lors de la recherche récursive pour les dossiers
    $aArray = _FileListToArrayRec($sAutoItDir, "Icons", $FLTAR_FOLDERS, $FLTAR_RECUR, $FLTAR_SORT)
    _ArrayDisplay($aArray, "Récursivité sur les dossiers avec filtre")

    ; Notez que le paramètre exlude_folder est ignoré lors de la recherche dans les répertoires - "Icons" sera exclus mais "Include" sera toujours là
    $aArray = _FileListToArrayRec($sAutoItDir, "*|ic*|i*", $FLTAR_FOLDERS, $FLTAR_RECUR, $FLTAR_SORT)
    _ArrayDisplay($aArray, "'Icons' out - 'Include' in")

    ; La racine de C:\Windows montre ses répertoires cachés/système
    $aArray = _FileListToArrayRec("C:\Windows\", "*", $FLTAR_FOLDERS)
    _ArrayDisplay($aArray, "Affiche les dossiers cachés")

    ; La racine de C:\Windows omet ses répertoires cachés/système
    $aArray = _FileListToArrayRec("C:\Windows\", "*", $FLTAR_FOLDERS + $FLTAR_NOHIDDEN + $FLTAR_NOSYSTEM)
    _ArrayDisplay($aArray, "Cache les dossiers cachés")
EndFunc   ;==>Example