递归搜索 n 层目录下的目录

3
我希望您能帮助我找到指定扩展名的目录中的所有文件。
我正在使用以下代码:
string dir = "C:\temp"
FileInfo[] fsis = new DirectoryInfo(dir).GetFiles("*.cfg", SearchOption.AllDirectories);

问题在于某些目录包含许多嵌套的目录,因此需要很长时间。假设我知道所有.cfg文件只会深入n个目录,是否有办法修改上述代码仅搜索那么远,还是我必须从头编写自己的递归文件查找器?

1
你知道如何编写递归函数吗?传入一个 DirectoryInfo 和剩余的深度。如果剩余深度大于零,则搜索子文件夹。 - user47589
可能是如何限制递归子目录搜索的深度的重复问题。 - Lance U. Matthews
1个回答

3
List<FileInfo> FindFiles(List<FileInfo> results, string dir, int depth)
{
    // Get all cfg files in current directory
    results.AddRange(new DirectoryInfo(dir).GetFiles("*.cfg"));

    if(depth > 1)
    {
        // Recurse in all subdirectories
        foreach (DirectoryInfo d in new DirectoryInfo(dir).GetDirectories())
        {
            // But dont go as deep in those subdirectories
            FindFiles(results, d.FullName, depth - 1);
        }
    }
    return results;
}

然后您可以调用

List<FileInfo> = FindFiles(new List<FileInfo>(), "C:\Example", 5);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接