查找目录中所有文件的最简单方法,包括除一个子目录以外的所有文件?

时间:2011-02-22 01:59:13

标签: file-io .net-4.0 directory

在.NET中,

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

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

如果我想要除一个子目录以外的所有文件怎么办。

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

我在.NET 4.0,c#

3 个答案:

答案 0 :(得分:4)

试试这个:

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

答案 1 :(得分:3)

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

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

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

答案 2 :(得分:0)

正如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);       
    }