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?

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.


60

So einfach ist das:

string[] folders = System.IO.Directory.GetDirectories(@"C:\My Sample Path\","*", System.IO.SearchOption.AllDirectories);

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);

        }

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();
        }
    }
}

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)

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)
}

3
Das ist Pyhon, nicht C #, nicht wahr?
Tobonaut
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.