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); } } }); }
一次清理不完 多跑几次直到没有空文件夹就可以了,因为一次递归 有子文件夹的话也不算在删除范围内,第二次跑的时候就会清理了