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]]]]] )
$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 champss 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 |
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é |
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
#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