在某个级别上迭代文件
本文关键字:迭代 文件 | 更新日期: 2023-09-27 18:18:48
我试图遍历文件夹层次结构中某个级别上的所有文件,更具体地说,在所有子文件夹中。在对文件进行实际操作之前,我还想计算所有文件,以便能够显示进度条。这意味着迭代方法必须被调用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
更好的方法…?
在这里使用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) {
...
}
在使用GetFiles foreach之前,请尝试以下操作:
string [] fileEntries = Directory.GetFiles(subdir);
int intFileCount = fileEntries.length;
Directory的文档。GetFiles展示了如何递归地迭代目录树
你可以下载我为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;
将此改为您的代码
string [] files = Directory.GetFile("yourDirectory","*.*",SearchOptions.AllDirectories);
这将返回子目录中的所有文件,而不是使用递归