142 votes

Liste de tous les fichiers et répertoires dans un répertoire + sous-répertoires

Je veux lister tous les fichiers et répertoires contenus dans un répertoire et les sous-répertoires de ce répertoire. Si je choisis C:\ comme répertoire, le programme obtiendra tous les noms de fichiers et de dossiers du disque dur auxquels il a accès.

Une liste pourrait ressembler à

fd\\1.txt
fd\\2.txt
fd\\a\\
fd\\b\\
fd\\a\\1.txt
fd\\a\\2.txt
fd\\a\\a\\
fd\\a\\b\\
fd\\b\\1.txt
fd\\b\\2.txt
fd\\b\\a
fd\\b\\b
fd\\a\\a\\1.txt
fd\\a\\a\\a\\
fd\\a\\b\\1.txt
fd\\a\\b\\a
fd\\b\\a\\1.txt
fd\\b\\a\\a\\
fd\\b\\b\\1.txt
fd\\b\\b\\a

241voto

Ruslan F. Points 743
string[] allfiles = Directory.GetFiles("path/to/dir", "*.*", SearchOption.AllDirectories);

*.* est un modèle pour correspondre aux fichiers

Si le répertoire est également nécessaire, vous pouvez procéder comme suit :

 foreach (var file in allfiles){
     FileInfo info = new FileInfo(file);
 // Do something with the Folder or just add them to a list via nameoflist.add();
 }

66voto

Alastair Maw Points 1549

Directory.GetFileSystemEntries existe dans .NET 4.0+ et renvoie à la fois les fichiers et les répertoires. Appelez-le comme suit :

string[] entries = Directory.GetFileSystemEntries(path, "*", SearchOption.AllDirectories);

Notez que cette méthode ne permet pas de lister le contenu des sous-répertoires auxquels vous n'avez pas accès (UnauthorizedAccessException), mais elle peut être suffisante pour vos besoins.

21voto

Evan Dangol Points 211
public static void DirectorySearch(string dir)
{
    try
    {
        foreach (string f in Directory.GetFiles(dir))
        {
            Console.WriteLine(Path.GetFileName(f));
        }
        foreach (string d in Directory.GetDirectories(dir))
        {
            Console.WriteLine(Path.GetFileName(d));
            DirectorySearch(d);
        }
    }
    catch (System.Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
}

Remarque : la fonction n'affiche que les noms sans chemin relatif.

18voto

Guffa Points 308133

Utilisez le GetDirectories y GetFiles pour obtenir les dossiers et les fichiers.

Utilisez le SearchOption AllDirectories pour obtenir les dossiers et les fichiers dans les sous-dossiers également.

4voto

Krishna Sarma Points 1762

J'ai peur, le GetFiles renvoie la liste des fichiers mais pas celle des répertoires. La liste dans la question m'incite à dire que le résultat devrait également inclure les dossiers. Si vous voulez une liste plus personnalisée, vous pouvez essayer d'appeler GetFiles y GetDirectories de manière récursive. Essayez ceci :

List<string> AllFiles = new List<string>();
void ParsePath(string path)
{
    string[] SubDirs = Directory.GetDirectories(path);
    AllFiles.AddRange(SubDirs);
    AllFiles.AddRange(Directory.GetFiles(path));
    foreach (string subdir in SubDirs)
        ParsePath(subdir);
}

Conseil : Vous pouvez utiliser FileInfo y DirectoryInfo si vous devez vérifier un attribut spécifique.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X