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