以递归方式获取文件数

时间:2015-06-14 11:25:30

标签: c#

我试图计算计算机中* .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());
    }

  }

}

2 个答案:

答案 0 :(得分:1)

你可以使用:

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

答案 1 :(得分:0)

您的代码无效,因为您没有访问所有目录,只有第一个目录(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作为Andrew和Hamlet Hakobyan建议的。