问题遇到的现象和发生背景
如题,在进行工程业务中,我需要一个能断点继续的文件夹及文件统计大小或者数量的方法,但网上给与的答案无法保证断点继续。
问题相关代码,请勿粘贴截图
/// <summary>
/// 获取文件夹大小
/// </summary>
/// <param name="dirPath"></param>
/// <returns></returns>
static long GetDirectorySize(string dirPath)
{
if (!System.IO.Directory.Exists(dirPath))
return 0;
long len = 0;
DirectoryInfo di = new DirectoryInfo(dirPath);
//获取di目录中所有文件的大小
foreach (FileInfo item in di.GetFiles())
{
len += item.Length;
}
//获取di目录中所有的文件夹,并保存到一个数组中,以进行递归
DirectoryInfo[] dis = di.GetDirectories();
if (dis.Length > 0)
{
for (int i = 0; i < dis.Length; i++)
{
//递归dis.Length个文件夹,得到每个dis[i]下面所有文件的大小
len += GetDirectorySize(dis[i].FullName);
}
}
return len;
}
//或者是这样
System.IO.DirectoryInfo dirInfo = new System.IO.DirectoryInfo(dirPath);
public static int GetFilesCount(System.IO.DirectoryInfo dirInfo)
{
int totalFile = 0;
totalFile += dirInfo.GetFiles().Length;
foreach (System.IO.DirectoryInfo subdir in dirInfo.GetDirectories())
{
totalFile += GetFilesCount(subdir);
}
return totalFile;
}
运行结果及报错内容
在一般情况下,这些方法没有问题,但用户不会用一般方法,他可能会直接向目录塞个C盘,然后扫描就炸了
我的解答思路和尝试过的方法
我甚至尝试判断权限
DirectoryInfo di = new DirectoryInfo(path);
DirectorySecurity s = new DirectorySecurity(path, AccessControlSections.Access);
//判断目录是否 可以访问
if (!s.AreAccessRulesProtected)
{
return 1;
}
但还是依然会提示权限不足,仿佛这个在try{}catch里的判断逻辑没有执行。
我想要达到的结果
最好是一个完整的类或者方法,能够实现断点继续的文件夹及文件统计大小或者数量的方法。