【问题标题】:simplest way to find all files in a directory including all but one sub directory?查找目录中所有文件的最简单方法,包括除一个子目录之外的所有文件?
【发布时间】:2011-02-22 01:59:13
【问题描述】:

在 .NET 中,

        DirectoryInfo dirInfo = new DirectoryInfo(searchDirectory);
        FileInfo[] allFiles = dirInfo.GetFiles("*.*", SearchOption.AllDirectories);

将为您获取所有文件,包括其子目录中的所有文件。

如果我想要除了一个子目录之外的所有文件。

我能做到这一点的最简单和/或最有效的方法是什么?

我在 .NET 4.0 中,c#

【问题讨论】:

  • 你是指除了一个目录之外的所有文件和目录?
  • 我的意思是我希望 allFiles 包含目录中的所有文件,包括除一个子目录之外的所有子目录中的所有文件。

标签: file-io .net-4.0 directory


【解决方案1】:

试试这个:

DirectoryInfo dirInfo = new DirectoryInfo(searchDirectory);
List<FileInfo> allFiles = new List<FileInfo>();
allFiles.AddRange(dirInfo.GetFiles());

foreach (DirectoryInfo di in dirInfo.GetDirectories())
{
    if (di.Name != "DirIDontWant")
    {
        allFiles.AddRange(di.GetFiles("*.*", SearchOption.AllDirectories));
    }
}

【讨论】:

    【解决方案2】:

    IntelliSense 和 MSDN 帮助我解决了这个问题:

    List<string> lFiles = new List<string>();
    lFiles.AddRange(Directory.GetFiles(lPath, "*", SearchOptions.AllDirectories));
    

    GetFiles 函数在 MSDN here 上定义。第一个参数是要搜索的目录;第二个参数是一个过滤器(*是通配符,获取所有文件),第三个参数是一个标志,指示是只获取指定目录中的文件还是所有子目录。

    【讨论】:

    • 我相信最后一个参数应该是SearchOption(不是复数)。
    【解决方案3】:

    正如 MSDN 文章中所建议的那样,使用深度优先方法递归: http://msdn.microsoft.com/en-us/library/07wt70x2.aspx

        // Process all files in the directory passed in, recurse on any directories  
        // that are found, and process the files they contain. 
        public static void ProcessDirectory(string targetDirectory) 
        {
            // Process the list of files found in the directory. 
            string [] fileEntries = Directory.GetFiles(targetDirectory);
            foreach(string fileName in fileEntries)
                ProcessFile(fileName);
    
            // Recurse into subdirectories of this directory. 
            string [] subdirectoryEntries = Directory.GetDirectories(targetDirectory);
            foreach(string subdirectory in subdirectoryEntries)
                ProcessDirectory(subdirectory);
        }
    
        // Insert logic for processing found files here. 
        public static void ProcessFile(string path) 
        {
            Console.WriteLine("Processed file '{0}'.", path);       
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-04
      • 2011-02-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多