wie man alle Unterverzeichnisse in einem Verzeichnis auflistet

83

Ich arbeite an einem Projekt und muss alle Unterverzeichnisse in einem Verzeichnis auflisten. Wie kann ich beispielsweise alle Unterverzeichnisse in c: \ auflisten?

Matthewj
quelle

Antworten:

143

Verwenden Sie Directory.GetDirectoriesdiese Option , um die Unterverzeichnisse des durch "your_directory_path" angegebenen Verzeichnisses abzurufen . Das Ergebnis ist ein Array von Zeichenfolgen.

var directories = Directory.GetDirectories("your_directory_path");

Standardmäßig werden nur Unterverzeichnisse mit einer Tiefe von einer Ebene zurückgegeben. Es gibt Optionen, um alle rekursiv zurückzugeben und die Ergebnisse zu filtern, die hier dokumentiert und in Clives Antwort angezeigt werden.


Vermeiden einer UnauthorizedAccessException

Es ist leicht möglich, dass Sie eine erhalten, UnauthorizedAccessExceptionwenn Sie auf ein Verzeichnis klicken, auf das Sie keinen Zugriff haben.

Möglicherweise müssen Sie eine eigene Methode erstellen, die die Ausnahme wie folgt behandelt:

public class CustomSearcher
{ 
    public static List<string> GetDirectories(string path, string searchPattern = "*",
        SearchOption searchOption = SearchOption.AllDirectories)
    {
        if (searchOption == SearchOption.TopDirectoryOnly)
            return Directory.GetDirectories(path, searchPattern).ToList();

        var directories = new List<string>(GetDirectories(path, searchPattern));

        for (var i = 0; i < directories.Count; i++)
            directories.AddRange(GetDirectories(directories[i], searchPattern));

        return directories;
    }

    private static List<string> GetDirectories(string path, string searchPattern)
    {
        try
        {
            return Directory.GetDirectories(path, searchPattern).ToList();
        }
        catch (UnauthorizedAccessException)
        {
            return new List<string>();
        }
    }
}

Und dann nenne es so:

var directories = CustomSearcher.GetDirectories("your_directory_path");

Dies durchläuft rekursiv ein Verzeichnis und alle seine Unterverzeichnisse. Wenn es auf ein Unterverzeichnis trifft, auf das es nicht zugreifen kann, etwas, das eine ausgelöst hätte UnauthorizedAccessException, fängt es die Ausnahme ab und gibt nur eine leere Liste für dieses unzugängliche Verzeichnis zurück. Dann geht es weiter zum nächsten Unterverzeichnis.

vivat Fische
quelle
60

So einfach ist das:

string[] folders = System.IO.Directory.GetDirectories(@"C:\My Sample Path\","*", System.IO.SearchOption.AllDirectories);
Clive
quelle
Super Lösung!
Majedur Rahaman
7
FolderBrowserDialog fbd = new FolderBrowserDialog();

        DialogResult result = fbd.ShowDialog();

        string[] files = Directory.GetFiles(fbd.SelectedPath);
        string[] dirs = Directory.GetDirectories(fbd.SelectedPath);

        foreach (string item2 in dirs)
        {
            FileInfo f = new FileInfo(item2);

            listBox1.Items.Add(f.Name);

        }

        foreach (string item in files)
        {
            FileInfo f = new FileInfo(item);

            listBox1.Items.Add(f.Name);

        }
Hakan SUMNULU
quelle
Wenn Sie keine Auflistung in einem Listenfeld durchführen und dem Benutzer die Auswahl des Ordners gewähren möchten, funktioniert diese Antwort.
Mert Gülsoy
5
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace TRIAL
{
    public class Class1
    {
        static void Main(string[] args)
        {
           string[] fileArray = Directory.GetDirectories("YOUR PATH");
           for (int i = 0; i < fileArray.Length; i++)
           {

               Console.WriteLine(fileArray[i]);
           }
            Console.ReadLine();
        }
    }
}
Mayur Narula
quelle
0

Um nur die einfache Liste der Ordner ohne vollständigen Pfad zu erhalten, können Sie Folgendes verwenden:

Directory.GetDirectories(parentDirectory).Select(d => Path.GetRelativePath(parentDirectory, d)
BuddyZ
quelle
Benötigt eine zusätzliche schließende Klammer am Ende (hätte sie bearbeitet, müsste aber geändert werden \ mindestens sechs Zeichen hinzufügen, damit sie akzeptiert wird). Beachten Sie auch, dass .NET Standard 2.1 installiert sein muss, um Path.GetRelativePath
StuKay
-1

Alle Verzeichnisse und Unterverzeichnisse anzeigen

def dir ():

from glob import glob

dir = []

dir = glob("path")

def all_sub_dir(dir):
{

     for item in dir:

            {
                b = "{}\*".format(item)
                dir += glob(b)
            }
         print(dir)
}
Mostafa-Hajian
quelle
3
Das ist Pyhon, nicht C #, nicht wahr?
Tobonaut