c# - 递归删除空文件夹,直到在目录树中找到非空目录

标签 c# recursion

我有一个基于 GUID 构建图像文件夹的大量图像的体系结构:

C:\AdPictures\7e\42\1a\dc-7\3b\7-\4e\c2-9\ee\f-\f2\4c\7d\4a\32\14\

我需要进行递归删除,直到从文件夹“14”到目录“7e”的文件夹不为空(“AdPictures”文件夹需要保留,因为它是根目录)。

我发现:

Directory.Delete(folderPath, true); 

但使用时它会删除所有内容。

我如何实现一种从底部开始删除所有空目录并在找到树上的非空目录后停止的方法?

我的解决方案应该使用递归。

最佳答案

这里是递归的方法。

DirectoryInfo dir = new DirectoryInfo(folderPath);
DeleteFolderIfEmpty(dir);


public void DeleteFolderIfEmpty(DirectoryInfo dir){
   if(dir.EnumerateFiles().Any() || dir.EnumerateDirectories().Any())
        return;
   DirectoryInfo parent = dir.Parent;
   dir.Delete();

   // Climb up to the parent
   DeleteFolderIfEmpty(parent);
}

防止删除根目录

DirectoryInfo dir = new DirectoryInfo(folderPath);
DeleteFolderIfEmpty(dir);


public void DeleteFolderIfEmpty(DirectoryInfo dir){
   if(dir.EnumerateFiles().Any() || dir.EnumerateDirectories().Any())
        return;

   if(dir.FullName == @"c:\folder\root")
        return;

   DirectoryInfo parent = dir.Parent;
   dir.Delete();

   // Climb up to the parent
   DeleteFolderIfEmpty(parent);
}

关于c# - 递归删除空文件夹,直到在目录树中找到非空目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22570935/

相关文章:

node.js - MongoDB - 递归填充文档字段

C# 正则表达式包含 []

python - 将分而治之递归算法转换为迭代版本

c# - 同步套接字是否仍允许外部用户操作?

c# - 在以x86为目标的docker中运行.NET Core项目会抛出System.BadImageFormatException

java - 大 O 与递归

javascript - 我如何在 javascript 上正确使用递归来制作车牌?

java - 试图递归地找到数组中第二小的整数java

c# - 主要输出的 Visual Studio 部署项目快捷方式 - 'Open file location' 不工作

c# - 优化渐变框动画