110,571
社区成员
发帖
与我相关
我的任务
分享
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;
}