我如何执行完整的递归目录&文件扫描

本文关键字:递归 扫描 文件 何执行 执行 | 更新日期: 2023-09-27 18:01:18

下面是我的代码:

    private static void TreeScan(string sDir)
    {
        foreach (string d in Directory.GetDirectories(sDir))
        {
            foreach (string f in Directory.GetFiles(d))
            {
                //Save file f
            }
        }
        TreeScan(d, client);
    }

问题是它没有得到文件sDir(起始目录)它只得到文件夹和子文件夹中的文件。

如何使它也从sDir获取文件?

我如何执行完整的递归目录&文件扫描

不要重新发明轮子,使用GetFiles的过载,允许您指定它搜索子目录。

string[] files 
    = Directory.GetFiles(path, searchPattern, SearchOption.AllDirectories);
private static void TreeScan( string sDir )
{
    foreach (string f in Directory.GetFiles( sDir ))
    {
        //Save f :)
    }
    foreach (string d in Directory.GetDirectories( sDir ))
    {
        TreeScan( d ); 
    }
}

你的代码有一些问题。首先,您从未看到根文件夹中的文件的原因是您在执行和文件读取之前递归。试试这个:

public static void Main()
{
    TreeScan(@"C:'someFolder");
}
private static void TreeScan(string sDir)
{
    foreach (string f in Directory.GetFiles(sDir))
        Console.WriteLine("File: " + f); // or some other file processing
    foreach (string d in Directory.GetDirectories(sDir))
        TreeScan(d); // recursive call to get files of directory
}

你必须使用

Directory.GetFiles(targetDirectory);

包含您正在寻找的内容的完整实现。

你的GetFiles循环应该在GetDirectories循环之外。你的TreeScan不应该留在GetDirectories循环中吗?简而言之,代码应该是这样的:

private static void TreeScan(string sDir)
{
    foreach (string d in Directory.GetDirectories(sDir))
    {
        TreeScan(d, client);
    }
    foreach (string f in Directory.GetFiles(d))
    {
        //Save file f
    }
}

如果使用Fx4及以上的EnumerateFiles方法将返回具有有效内存管理的所有文件,而GetFiles可能需要大目录(或驱动器)上的最大资源。

var files = Directory.EnumerateFiles(dir.Path, "*.*");