2011-09-04 208 views

回答

70

使用Directory.GetDirectories獲取「your_directory_path」指定的目錄的子目錄。結果是一串字符串。

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

默認情況下,它只返回一級深度的子​​目錄。有些選項可以遞歸地返回所有內容,並篩選結果,documented here,並顯示在Clive的答案中。


避免了UnauthorizedAccessException

這無疑可能你會得到一個UnauthorizedAccessException如果你打一個目錄到你沒有訪問。

您可能需要創建自己的方法處理異常,就像這樣:

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

然後調用它像這樣:

var directories = CustomSearcher.GetDirectories("your_directory_path"); 
+0

不會仍然會拋出一個UnauthorizedAccessException和*不*獲取剩餘的文件夾? –

+0

@ J.Doe它遞歸地遍歷目錄及其所有子目錄。如果它遇到了一個它無法訪問的子目錄,那麼會拋出一個'UnauthorizedAccessException'的東西,它會捕獲異常,並返回一個空的列表給那個不可訪問的目錄。然後它繼續到下一個子目錄。 –

38

容易,因爲這:

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

如果你想在列表框中列出並授予用戶選擇哪個文件夾,是的,這個答案有效。 –

相關問題