C# 实现递归算法循环删除空文件夹及所有的子目录空文件夹


C# 实现递归算法循环删除空文件夹及所有的子目录空文件夹

之前开发的一个项目开发清理功能的时候之操作了清理文件 没有去管空目录,这连续跑了小半年 发现对应的目录打开慢的要死,一看属性文件夹100w+,于是想着写一个清理空目录的功能,最开始想着通过DirectoryInfo拿到所有的目录然后对目录进行判断是否为空再进行删除操作,最后发现根本文件夹太多直接卡在这里不动了 于是就改用单个目录一级一级进行递归删除 发现效果还可以 100w+的文件夹很快就删除干净了

代码如下:

        /// <summary>
        /// 递归清理空文件夹
        /// </summary>
        private static Task KillEmptyDirectory(DirectoryInfo directory)
        {
            return Task.Run(async () =>
             {
                 WorkingBusyEvent.WaitOne();
                 var files = directory.GetFiles("*.*", SearchOption.TopDirectoryOnly);//目录文件数目
                 var dirs = directory.GetDirectories("*.*", SearchOption.TopDirectoryOnly);//子目录数目
                 if (files.Length == 0 && dirs.Length == 0)
                 {
                     directory.Delete();
                 }
                 else if (dirs.Length == 0)
                 {
                     ///存在文件不存在目录 直接结束
                     return;
                 }
                 else
                 {
                     ///按时间排序进行递归
                     var sortdirs = dirs.OrderBy(e => e.CreationTime);
                     ///存在在目录不存在文件 继续递归
                     foreach (DirectoryInfo dir in sortdirs)
                     {
                         await KillEmptyDirectory(dir);
                     }
                 }
             });
        }

一次清理不完 多跑几次直到没有空文件夹就可以了,因为一次递归 有子文件夹的话也不算在删除范围内,第二次跑的时候就会清理了

文章地址: C# 实现递归算法循环删除空文件夹及所有的子目录空文件夹 | Yuan天空博客

相关内容