Yuan天空
Yuan天空
  • 我的主页
  • 博客随笔
  • 软件作品
    • TK精灵(进程守护)
    • 远程运维助手
    • DicomStoreSCU
    • TKOCR(离线OCR)
    • 更多...
  • 学习资源
  • 网址收藏
  • HTML模板
专注.NET开发技术领域
  1. 主页
  2. 博客
  3. 发布页

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

C#删除空文件夹递归算法清理文件夹
编程开发 2021-11-10 104
贴个广告
C# .NET WPF UI界面控件库源码|控件源码|
Loading...
C#控件/wpf实例/WPF源码/xaml源文件/Demo程序
Loading...
博客正文

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# 实现windows服务程序的安装、启动、暂停以及卸载 等管理功能
Loading...
c# 实现windows服务程序的安装、启动、暂停以及卸载 等管理功能
基于C#人名币基础加减法换算最终得出<元角分>的计算结果的实现
Loading...
基于C#人名币基础加减法换算最终得出<元角分>的计算结果的实现
c#通过winAPI函数InternetGetConnectedState获得本地系统的网络连接状态
Loading...
c#通过winAPI函数InternetGetConnectedState获得本地系统的网络连接状态
WPF 数据转换器 IValueConverter例子
Loading...
WPF 数据转换器 IValueConverter例子
C# .NET中 使用GDI+ 添加图形水印
Loading...
C# .NET中 使用GDI+ 添加图形水印
C# 实现本地文件怎么转换成byte[] 进行读取操作
Loading...
C# 实现本地文件怎么转换成byte[] 进行读取操作
C#怎么获取windows系统支持的字体以及字体样式
Loading...
C#怎么获取windows系统支持的字体以及字体样式
C#在.netcore实现中文汉字笔画计算 获得中文汉字的书写笔画数
Loading...
C#在.netcore实现中文汉字笔画计算 获得中文汉字的书写笔画数
C# 中使用const 常量可能会出现的版本更新问题!
Loading...
C# 中使用const 常量可能会出现的版本更新问题!
C#编程怎么使用正则表达式提取或匹配内容
Loading...
C#编程怎么使用正则表达式提取或匹配内容
C# MailKit+MimeKit+QQ邮箱 实现发送邮件的简单例子
Loading...
C# MailKit+MimeKit+QQ邮箱 实现发送邮件的简单例子
.NET环境下System.Drawing.Color对应的颜色值RGB对照表
Loading...
.NET环境下System.Drawing.Color对应的颜色值RGB对照表
问题反馈/学习建议
1. 文明上网,理性表达,营造舒适的学习氛围
2. 请不要反馈提交与本页主题无关内容
学习资源
[人脸检测]基于C#OpenCvSharp+haarcascade人脸、人眼模型实现人脸检测源码
Loading...
[人脸检测]基于C#OpenCvSharp+haarcascade人脸、人眼模型实现人脸检测源码
基于.NET4.0实现的目录文件新增监视并自动化上传至ftp完整流程工具源码
Loading...
基于.NET4.0实现的目录文件新增监视并自动化上传至ftp完整流程工具源码
C#结合虫洞软件(Wormhole)实现自动登录到手机版百度网盘的流程源码
Loading...
C#结合虫洞软件(Wormhole)实现自动登录到手机版百度网盘的流程源码
.NET5+C# WPF实现图片添加倾斜文字平铺水印工具源码
Loading...
.NET5+C# WPF实现图片添加倾斜文字平铺水印工具源码
标题目录
  • C# 实现递归算法循环删除空文件夹及所有的子目录空文件夹