cách liệt kê tất cả các thư mục con trong một thư mục


83

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:


143

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.


60

Dễ dàng như thế này:

string[] folders = System.IO.Directory.GetDirectories(@"C:\My Sample Path\","*", System.IO.SearchOption.AllDirectories);

Giải pháp siêu việt!
Majedur Rahaman

7
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);

        }

nếu bạn không muốn liệt kê trong hộp danh sách và cho phép người dùng chọn thư mục nào, vâng, câu trả lời này hoạt động.
Mert Gülsoy

5
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();
        }
    }
}

0

Để 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)

Cần thêm một dấu ngoặc đóng ở cuối (Có thể đã chỉnh sửa nó nhưng cần thay đổi \ thêm ít nhất sáu ký tự để nó được chấp nhận). Cũng lưu ý rằng bạn cần cài đặt .NET Standard 2.1 để sử dụng Path.GetRelativePath
StuKay

-1

hiển thị tất cả các thư mục và thư mục con

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)
}

3
Đây là Pyhon, không phải C #, phải không?
Tobonaut
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.