以递归方式获取文件数

本文关键字:文件 获取 方式 递归 | 更新日期: 2023-09-27 17:56:00

我正在尝试计算计算机中*.tmp文件的数量。当我单击一个按钮时,标签框应该开始增加每次搜索文件的计数.tmp数。我的以下编码似乎不起作用。

任何帮助都非常感谢。另外,当我单击按钮以获取tmp文件的数量时;标签框应该开始显示计数的增加,如 1,2,,,,,56,,89,,,等,而不仅仅是显示文件总数。

namespace finalclean {
public partial class FinalClean : Form {
    public FinalClean() {
        InitializeComponent();
    }
    int count = 0; 
    private void button1_Click(object sender, EventArgs e) {
       String path = Environment.ExpandEnvironmentVariables(@"c:'windows");
       try {
          foreach (string dirPath in Directory.GetDirectories(path)) {
               foreach (string filePath in Directory.GetFiles(dirPath)) {
                   string filename = Path.GetFileName(filePath);
                   if (filename.Equals("*.tmp")) {
                       count++;
                   }
               }
           }
       }
         catch (System.Exception excpt) {
             //Console.WriteLine(excpt.Message);
         }
       textBox1.Text = (count.ToString());
    }
  }
}

以递归方式获取文件数

你可以只使用:

var count = Directory.EnumerateFiles(@"C:'Windows'", "*.tmp", 
                      SearchOption.AllDirectories).Count();

你的代码不起作用,因为你没有访问所有的目录,而只是访问第一个目录(C:''Windows)。

如果你让它递归,它可以为你做这个技巧。

internal class Program
{
    private static void Main(string[] args)
    {
        var myClass = new Visitor();
        myClass.OnNewFileFound +=Progress;
        myClass.CountTmpFiles();
        Console.Read();
    }
    private static void Progress(int i)
    {
        Console.WriteLine(i); //update textbox here
    }
}
public class Visitor
{
    public event Action<int> OnNewFileFound;
    private int count = 0;
    public int CountTmpFiles()
    {
        var path = Environment.ExpandEnvironmentVariables(@"c:'windows");
        VisitDir(path);
        return count;
    }
    private void VisitDir(string path)
    {
        try
        {
            foreach (var directory in Directory.GetDirectories(path))
            {
                VisitDir(directory); //recursive call here
            }
            foreach (var filePath in Directory.GetFiles(path, "*.tmp", SearchOption.TopDirectoryOnly))
            {
                count++;
                if (OnNewFileFound != null)
                {
                    OnNewFileFound(count);
                }
            }
        }
        catch (System.Exception excpt)
        {
            //Console.WriteLine(excpt.Message);
        }
    }
}

是的,如果您只计算文件,那么编写自己的代码就没有意义了。你只需按照安德鲁和哈姆雷特·哈科比安的建议使用Directory.EnumerateFiles