这是我的代码:
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获取文件?
答案 0 :(得分:45)
不要重新发明轮子,使用允许您指定它搜索子目录的GetFiles
重载。
string[] files
= Directory.GetFiles(path, searchPattern, SearchOption.AllDirectories);
答案 1 :(得分:9)
private static void TreeScan( string sDir )
{
foreach (string f in Directory.GetFiles( sDir ))
{
//Save f :)
}
foreach (string d in Directory.GetDirectories( sDir ))
{
TreeScan( d );
}
}
答案 2 :(得分: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 :(得分:1)
答案 4 :(得分:0)
您的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 :(得分:0)
如果使用Fx4及更高版本,EnumerateFiles
方法将返回所有具有高效内存管理的文件,而GetFiles
可能需要大目录(或驱动器)上的最大资源。
var files = Directory.EnumerateFiles(dir.Path, "*.*");