阁下直接把代码中【获取文件夹大小】方法拿出来就能用。
using System;
using System.Threading.Tasks;
using System.Threading;
using static System.Console;
using System.IO;
using System.Diagnostics;
namespace 获取文件夹大小
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("请输入文件夹地址:");
//string 地址 = @"D:\余姚品匠";
string 地址 = ReadLine();
var 取消 = new CancellationTokenSource();
var 计时器 = new Stopwatch();
计时器.Start();
var 任务 = Task.Run(() =>
{
return 获取文件夹大小(地址, 0, 取消) / 1024F / 1024;
}, 取消.Token);
任务.ContinueWith(x =>
{
计时器.Stop();
if (x.IsCanceled)
{
WriteLine("计算已取消");
}
else if (x.IsFaulted)
{
foreach (var item in x.Exception.InnerExceptions)
{
WriteLine($"[异常]{item.Message}");
}
}
else
{
WriteLine($"完成共{x.Result}MB,耗时:{计时器.ElapsedMilliseconds / 1000F}MS");
}
});
Console.WriteLine();
WriteLine("按任意键取消计算");
ReadLine();
取消.Cancel();
ReadLine();
}
static long 获取文件夹大小(string 地址, long 大小, CancellationTokenSource 取消)
{
while (true)
{
取消.Token.ThrowIfCancellationRequested();
var 文件夹 = new DirectoryInfo(地址);
if (!文件夹.Exists)
{
throw new ArgumentException("文件夹不存在!");
}
foreach (var 文件 in 文件夹.GetFiles())
{
大小 += 文件.Length;
}
foreach (var 目录 in 文件夹.GetDirectories())
{
大小 += 获取文件夹大小(目录.FullName, 0, 取消);
}
return 大小;
}
}
}
}