如何执行完整的递归目录和文件扫描?
这是我的代码:
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获取文件呢?
private static void TreeScan( string sDir ) { foreach (string f in Directory.GetFiles( sDir )) { //Save f :) } foreach (string d in Directory.GetDirectories( sDir )) { TreeScan( d ); } }
不要重新发明轮子,使用GetFiles
,允许您指定它搜索子目录。
string[] files = Directory.GetFiles(path, searchPattern, SearchOption.AllDirectories);
您的代码存在一些问题。 首先,你从未看过根文件夹中的文件的原因是因为在执行和文件读取之前你已经递归了。 试试这个:
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, "*.*");