【问题标题】:how to list all sub directories in a directory如何列出目录中的所有子目录
【发布时间】:2011-11-09 22:48:03
【问题描述】:

我正在做一个项目,我需要列出一个目录中的所有子目录,例如如何列出 c:\

中的所有子目录

【问题讨论】:

    标签: c# directory


    【解决方案1】:

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

    然后这样称呼它:

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

    这会递归遍历一个目录及其所有子目录。如果它遇到了一个它无法访问的子目录,它会抛出一个UnauthorizedAccessException,它会捕获异常并为那个无法访问的目录返回一个空列表。然后它继续到下一个子目录。

    【讨论】:

      【解决方案2】:

      就这么简单:

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

      【讨论】:

      • 超级解决方案!
      • 作为“*”的 searchPattern 是秘密,因为我们不能传递 null,很好的解决方案!
      【解决方案3】:
      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);
      
              }
      

      【讨论】:

      • 如果您想在列表框中列出并授予用户选择哪个文件夹,是的,这个答案有效。
      【解决方案4】:
      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();
              }
          }
      }
      

      【讨论】:

        【解决方案5】:

        要获取没有完整路径的简单文件夹列表,您可以使用:

        Directory.GetDirectories(parentDirectory).Select(d => Path.GetRelativePath(parentDirectory, d)
        

        【讨论】:

        • 最后需要一个额外的右括号(本来可以编辑它,但需要更改\添加至少六个字符才能被接受)。另请注意,您需要安装 .NET Standard 2.1 才能使用 Path.GetRelativePath
        【解决方案6】:

        显示所有目录和子目录

        定义目录():

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

        【讨论】:

        • 这是 Pyhon,不是 C#,不是吗?
        猜你喜欢
        • 2014-03-08
        • 2011-11-09
        • 2012-11-14
        • 2010-12-15
        • 1970-01-01
        • 1970-01-01
        • 2012-09-02
        相关资源
        最近更新 更多