qq_38973590 2022-03-23 12:47 采纳率: 0%
浏览 34
已结题

需要一个能断点继续的文件夹及文件统计大小或者数量的方法,DirectoryInfo.GetFiles坑太多了!

问题遇到的现象和发生背景

如题,在进行工程业务中,我需要一个能断点继续的文件夹及文件统计大小或者数量的方法,但网上给与的答案无法保证断点继续。

问题相关代码,请勿粘贴截图

        /// <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里的判断逻辑没有执行。

我想要达到的结果

最好是一个完整的类或者方法,能够实现断点继续的文件夹及文件统计大小或者数量的方法。

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 3月31日
    • 创建了问题 3月23日

    悬赏问题

    • ¥15 如何改进这个简易的模数转换程序
    • ¥30 模拟电路 logisim
    • ¥15 PVE8.2.7无法成功使用a5000的vGPU,什么原因
    • ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
    • ¥15 安装quartus II18.1时弹出此error,怎么解决?
    • ¥15 keil官网下载psn序列号在哪
    • ¥15 想用adb命令做一个通话软件,播放录音
    • ¥30 Pytorch深度学习服务器跑不通问题解决?
    • ¥15 部分客户订单定位有误的问题
    • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法