现在大部分统计文件夹大小都是递归方式。有没有其他的解决方式,求指教C# 非递归文件夹大小

解决方案 »

  1.   

    需要回溯的,只能递归。所谓不用递归,无非两种,一个是某个API内部封装了递归操作,使得你可以直接调用,或者借助堆栈等数据结构保存回溯的状态,其实还是递归,只是放弃使用系统堆栈。
      

  2.   

    打开C盘,选择"WINDOWS"文件夹,点击属性。接着。。你会看到文件夹大小不停的上涨。
    说明:连windows操作系统本身都是用递归去统计所有文件大小的。
      

  3.   

    函数(路径)
    {
        把当前路径加入到队列
        循环(队列不为空)
        {
            var 路径=队列首元素出列
            if(判断路径是否有权限访问), 没有权限访问,就Continue。
            获取路径下所有的文件。
            处理文件。
            获取路径下所有的子文件夹。
            把所有的文件夹加入到子队列。
        }
    }
      

  4.   

    递归无非就是隐式的使用了一个堆栈,因为这个需求并不十分复杂,我们可以用自己的堆栈来代替递归。private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
    {
        string path = (string)e.Argument;    Stack<DirectoryInfo> stack;
        DirectoryInfo dir;
        long sum = 0;    dir = new DirectoryInfo(path);    if (dir.Exists)
        {
            stack = new Stack<DirectoryInfo>();
            stack.Push(dir);        while (stack.Count > 0)
            {
                dir = stack.Pop();
                backgroundWorker1.ReportProgress(0, dir);
                try
                {
                    sum += dir.GetFiles().Sum(o => o.Length);
                }
                catch (UnauthorizedAccessException)
                {
                    continue;
                }            var subdirs = dir.GetDirectories();            foreach (var sub in subdirs)
                {
                    stack.Push(sub);
                }        }
        }
        else
            sum = -1;    e.Result = sum;
    }
      

  5.   

    完整的演示代码在这里下载:http://files.cnblogs.com/effun/Csdn390529029.zip
      

  6.   

    http://www.zhihu.com/question/20418254
    这里面说得很详细