Я работаю над проектом, и мне нужно перечислить все подкаталоги в каталоге, например, как я могу перечислить все подкаталоги в каталоге c:\
Как перечислить все вспомогательные каталоги в каталоге
Ответ 1
Используйте Directory.GetDirectories
, чтобы получить подкаталоги каталога, указанного в "your_directory_path". В результате получается массив строк.
var directories = Directory.GetDirectories("your_directory_path");
По умолчанию это возвращает подкаталоги только на один уровень глубины. Существуют варианты возврата всех рекурсивно и фильтрации результатов, задокументированные здесь и показанные в ответе Клайва.
Как избежать UnauthorizedAccessException
Вполне возможно, что вы получите UnauthorizedAccessException
, если попадете в каталог, к которому у вас нет доступа.
Возможно, вам придется создать собственный метод, который обрабатывает исключение, например:
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>();
}
}
}
А потом назови это так:
var directories = CustomSearcher.GetDirectories("your_directory_path");
Это рекурсивно пересекает каталог и все его подкаталоги. Если он попадает в подкаталог, к которому он не может получить доступ, что-то, что вызвало бы UnauthorizedAccessException
, он перехватывает исключение и просто возвращает пустой список для этого недоступного каталога. Затем он переходит к следующему подкаталогу.
Ответ 2
Просто, как это:
string[] folders = System.IO.Directory.GetDirectories(@"C:\My Sample Path\","*", System.IO.SearchOption.AllDirectories);
Ответ 3
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);
}
Ответ 4
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();
}
}
}
Ответ 5
показать все директории и подкаталоги
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)
}