在某个级别上迭代文件

本文关键字:迭代 文件 | 更新日期: 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);

这将返回子目录中的所有文件,而不是使用递归