Pracuję nad projektem i muszę wymienić wszystkie podkatalogi w katalogu, na przykład jak mogę wyświetlić wszystkie podkatalogi w c: \
Odpowiedzi:
Służy Directory.GetDirectories
do pobierania podkatalogów katalogu określonego przez „twoja_ścieżka_katalogu” . Wynikiem jest tablica ciągów.
var directories = Directory.GetDirectories("your_directory_path");
Domyślnie zwraca to tylko podkatalogi o jeden poziom głębokości. Istnieją opcje zwracania wszystkich rekurencyjnie i filtrowania wyników, udokumentowanych tutaj i pokazanych w odpowiedzi Clive'a.
Unikanie wyjątku UnauthorizedAccessException
Jest bardzo możliwe, że otrzymasz, UnauthorizedAccessException
jeśli trafisz do katalogu, do którego nie masz dostępu.
Być może będziesz musiał utworzyć własną metodę, która obsługuje wyjątek, na przykład:
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>();
}
}
}
A potem nazwij to tak:
var directories = CustomSearcher.GetDirectories("your_directory_path");
Powoduje to rekurencyjne przeszukiwanie katalogu i wszystkich jego podkatalogów. Jeśli trafi do podkatalogu, do którego nie może uzyskać dostępu, coś, co spowodowałoby wyrzucenie UnauthorizedAccessException
, przechwytuje wyjątek i po prostu zwraca pustą listę dla tego niedostępnego katalogu. Następnie przechodzi do następnego podkatalogu.
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();
}
}
}
Aby uzyskać prostą listę folderów bez pełnej ścieżki, możesz użyć:
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)
}