我正在尝试遍历文件夹层次中某个级别的所有文件,更具体地说,在所有子子文件夹中。在对文件进行实际操作之前,我还想计算所有文件以显示进度条。这意味着必须调用迭代方法2次。这是相关的代码,我现在正在使用:
Iterate(bool count)
{
foreach (string dir in Directory.GetDirectories(root))
foreach (string subdir in Directory.GetDirectories(dir))
foreach (string file in Directory.GetFiles(subdir))
{
if (count) progressBar.Maximum++;
else
{
//do operations
}
}
}
我想知道是否有更好的方法。当然必须有一个比为每个文件夹级别添加foreach
更好的方法..?
答案 0 :(得分:0)
在你的GetFiles foreach之前,试试这个:
string [] fileEntries = Directory.GetFiles(subdir);
int intFileCount = fileEntries.length;
如果循环仅用于计算文件,它可以替换它。
答案 1 :(得分:0)
documentation of Directory.GetFiles显示了如何递归迭代目录树
答案 2 :(得分:0)
在这里使用LINQ会更容易。
var files =
(from dir in Directory.GetDirectories(root)
from subdir in Directory.GetDirectories(dir)
from f in Directory.GetFiles(subdir)
select f).ToList();
var fileCount = files.Length;
foreach (var f in files) {
...
}
答案 3 :(得分:0)
你可以下载我为System.IO写的流利的东西(见这里:http://blog.staticvoid.co.nz/2011/11/staticvoid-io-extentions-nuget.html),然后使用这个LINQ语句
var files = from d in di.Directories()
from dir in d.Directories()
from f in dir.Files()
select f;
答案 4 :(得分:0)
写下这个代码
string [] files = Directory.GetFile("yourDirectory","*.*",SearchOptions.AllDirectories);
这将返回子目录中的所有文件,而不是使用递归