C#非递归统计一个文件夹的大小 求高手... 现在大部分统计文件夹大小都是递归方式。有没有其他的解决方式,求指教C# 非递归文件夹大小 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 需要回溯的,只能递归。所谓不用递归,无非两种,一个是某个API内部封装了递归操作,使得你可以直接调用,或者借助堆栈等数据结构保存回溯的状态,其实还是递归,只是放弃使用系统堆栈。 打开C盘,选择"WINDOWS"文件夹,点击属性。接着。。你会看到文件夹大小不停的上涨。说明:连windows操作系统本身都是用递归去统计所有文件大小的。 函数(路径){ 把当前路径加入到队列 循环(队列不为空) { var 路径=队列首元素出列 if(判断路径是否有权限访问), 没有权限访问,就Continue。 获取路径下所有的文件。 处理文件。 获取路径下所有的子文件夹。 把所有的文件夹加入到子队列。 }} 递归无非就是隐式的使用了一个堆栈,因为这个需求并不十分复杂,我们可以用自己的堆栈来代替递归。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;} 完整的演示代码在这里下载:http://files.cnblogs.com/effun/Csdn390529029.zip http://www.zhihu.com/question/20418254这里面说得很详细 关于FTP for循环里的一个问题,请教大家 如何把 字符串值从”sxxxs.zip“ 变为”sxxxs.csv“ 请教一下,一个页面如何获得从数据库里查询出来的word文本 如何用C#在web程序中用messagebox跳出提示框 请问如何把SaveFileDialog的窗口显示在最上面,其它窗口失去焦点? 数组问题,高难度 关于HttpWebRequest代理的问题. vs.net下建立的工程文件,在命令方式下,怎么编译生成exe 文件。急!! 数据集UPDATA的问题 委托的语法,平时还是不怎么注意. Interop 带格式化文本导出Word时怎么直接显示格式化后的文本
说明:连windows操作系统本身都是用递归去统计所有文件大小的。
{
把当前路径加入到队列
循环(队列不为空)
{
var 路径=队列首元素出列
if(判断路径是否有权限访问), 没有权限访问,就Continue。
获取路径下所有的文件。
处理文件。
获取路径下所有的子文件夹。
把所有的文件夹加入到子队列。
}
}
{
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;
}
这里面说得很详细