如何执行完整的递归目录和文件扫描?
Posted
技术标签:
【中文标题】如何执行完整的递归目录和文件扫描?【英文标题】:How can I perform full recursive directory & file scan? 【发布时间】:2011-09-30 02:22:01 【问题描述】:这是我的代码:
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 (起始目录) 的 FILES,它只得到文件夹和文件在子文件夹中。
我怎样才能让它也从 sDir 中获取文件?
【问题讨论】:
【参考方案1】:如果使用 Fx4 及更高版本,EnumerateFiles
方法将返回所有具有高效内存管理的文件,而 GetFiles
可能需要大目录(或驱动器)上的最大资源。
var files = Directory.EnumerateFiles(dir.Path, "*.*");
【讨论】:
【参考方案2】:您的代码存在一些问题。一方面,您从未从根文件夹中看到文件的原因是因为您在执行和文件读取之前进行了递归。试试这个:
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
【讨论】:
【参考方案3】:private static void TreeScan( string sDir )
foreach (string f in Directory.GetFiles( sDir ))
//Save f :)
foreach (string d in Directory.GetDirectories( sDir ))
TreeScan( d );
【讨论】:
【参考方案4】:您的 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
【讨论】:
【参考方案5】:不要重新发明***,使用GetFiles
的重载允许您指定它搜索子目录。
string[] files
= Directory.GetFiles(path, searchPattern, SearchOption.AllDirectories);
【讨论】:
终于有人懂了。 是的,但递归在第一次使用文件夹 System.UnauthorizedAccessException 保护时失败。 如果您不需要搜索模式,您可以使用星号 (*) 作为搜索模式返回所有目录【参考方案6】:你必须使用
Directory.GetFiles(targetDirectory);
就像在This sample 中一样,它包含您正在寻找的完整实现
【讨论】:
以上是关于如何执行完整的递归目录和文件扫描?的主要内容,如果未能解决你的问题,请参考以下文章