Я работаю над проектом, и мне нужно перечислить все подкаталоги в каталоге, например, как я могу перечислить все подкаталоги в c: \
Используйте 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
вызвать исключение, оно перехватывает исключение и просто возвращает пустой список для этого недоступного каталога. Затем он переходит к следующему подкаталогу.
Это просто:
string[] folders = System.IO.Directory.GetDirectories(@"C:\My Sample Path\","*", System.IO.SearchOption.AllDirectories);
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(); } } }
источник
Чтобы получить простой список папок без полного пути, вы можете использовать:
источник
показать все директории и подкаталоги
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) }
источник