在特定级别上迭代文件

时间:2011-12-24 13:27:47

标签: c# .net file-io

我正在尝试遍历文件夹层次中某个级别的所有文件,更具体地说,在所有子子文件夹中。在对文件进行实际操作之前,我还想计算所有文件以显示进度条。这意味着必须调用迭代方法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更好的方法..?

5 个答案:

答案 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);

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