Ich arbeite an einem Projekt und muss alle Unterverzeichnisse in einem Verzeichnis auflisten. Wie kann ich beispielsweise alle Unterverzeichnisse in c: \ auflisten?
Antworten:
Verwenden Sie Directory.GetDirectories
diese 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, UnauthorizedAccessException
wenn 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.
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);
}
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();
}
}
}
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)
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)
}