2011-09-04 77 views

Trả lời

70

Sử dụng Directory.GetDirectories để nhận 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 chuỗi các chuỗi.

var directories = Directory.GetDirectories("your_directory_path"); 

Theo mặc định, chỉ trả về thư mục con một cấp sâu. Có các tùy chọn để trả về tất cả đệ quy và lọc kết quả, documented here và hiển thị trong câu trả lời của Clive.


Tránh một UnauthorizedAccessException

Đó là một cách dễ dàng có thể bạn sẽ nhận được một UnauthorizedAccessException nếu bạn nhấn 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 pháp riêng của mình để xử lý ngoại lệ, như thế này:

public class CustomSearcher 
{ 
    public static List<string> GetDirectories(string path, string searchPattern = "*", 
     SearchOption searchOption = SearchOption.TopDirectoryOnly) 
    { 
     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"); 
+0

không phải là vẫn ném một UnauthorizedAccessException và * không * nhận được phần còn lại của các thư mục? –

+0

@ J.Doe Nó đi qua một thư mục và tất cả các thư mục con của nó đệ quy. Nếu nó chạm vào một thư mục con mà nó không thể truy cập, một cái gì đó đã ném ra một 'UnauthorizedAccessException', nó bắt được 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. –

38

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

string[] folders = System.IO.Directory.GetDirectories(@"C:\My Sample Path\","*", System.IO.SearchOption.AllDirectories); 
1
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(); 
     } 
    } 
} 
6
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); 

     } 
+0

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

Các vấn đề liên quan