Tôi đang làm việc trong một dự án và tôi cần liệt kê tất cả các thư mục con trong một thư mục, chẳng hạn như làm cách nào để liệt kê tất cả các thư mục con trong c: \
Câu trả lời:
Sử dụng Directory.GetDirectoriesđể lấy các thư mục con của thư mục được chỉ định bởi "your_directory_path" . Kết quả là một mảng các chuỗi.
var directories = Directory.GetDirectories("your_directory_path");
Theo mặc định, điều đó chỉ trả về các thư mục con sâu một cấp. Có các tùy chọn để trả về tất cả một cách đệ quy và lọc kết quả, được ghi lại ở đây và được hiển thị trong câu trả lời của Clive.
Tránh một ngoại lệ truy cập trái phép
Bạn có thể dễ dàng nhận được UnauthorizedAccessExceptionnếu bạn gặp một thư mục mà bạn không có quyền truy cập.
Bạn có thể phải tạo phương thức của riêng mình để xử lý ngoại lệ, như sau:
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>();
        }
    }
}
Và sau đó gọi nó như thế này:
var directories = CustomSearcher.GetDirectories("your_directory_path");
Điều này đi qua một thư mục và tất cả các thư mục con của nó một cách đệ quy. Nếu nó truy cập vào một thư mục con mà nó không thể truy cập, một cái gì đó sẽ ném vào UnauthorizedAccessException, nó sẽ bắt ngoại lệ và chỉ trả về một danh sách trống cho thư mục không thể truy cập đó. Sau đó, nó tiếp tục đến thư mục con tiếp theo.
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();
        }
    }
}
    Để chỉ có được danh sách các thư mục đơn giản mà không có đường dẫn đầy đủ, bạn có thể sử dụng:
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)
}