2011-09-04 95 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

如果你想在列表框中列出并授予用户选择哪个文件夹,是的,这个答案有效。 –

相关问题