删除文件夹,如果它是空的使用c#
本文关键字:文件夹 如果 删除 | 更新日期: 2023-09-27 18:15:00
我正在编写一个工具,它将允许我浏览相当大的目录和子目录列表。我希望它删除一个文件夹,如果它是空的。我可以用下面的代码删除空文件夹和子文件夹:
string dir = textBox1.Text;
string[] folders = System.IO.Directory.GetDirectories(dir, "*.*", System.IO.SearchOption.AllDirectories);
foreach (var directory in folders)
{
if (System.IO.Directory.GetFiles(directory).Length == 0 && System.IO.Directory.GetDirectories(directory).Length == 0)
{
System.IO.StreamWriter Dfile = new System.IO.StreamWriter(newpath, true);
System.IO.Directory.Delete(directory);
}
}
我的问题是如何让代码通过并检查每次删除后的文件夹,因为一旦它删除一个文件夹,它可以使父文件夹为空,然后应该被删除。一旦代码没有找到任何为空的文件夹或子文件夹,它将退出。
写一个深度优先递归函数。在完成每个递归调用时,检查当前文件夹是否为空。如果是,则删除。
像这样(伪代码)
DeleteEmptyFolders(path)
{
foreach Folder f in Path
{
DeleteEmptyFolders(f);
if (f is empty)
{
Delete(f);
}
}
}
您可以这样递归地执行此操作(未测试):
void DeleteFolder(string folder) {
string[] folders = System.IO.Directory.GetDirectories(folder, "*.*", System.IO.SearchOption.AllDirectories);
foreach (var directory in folders)
{
DeleteFolder(directory);
}
//delete this folder if empty
}
这是一个想法(这没有经过测试)
while ( true )
{
DirectoryInfo parent = Directory.GetParent(current.FullName);
if ( parent.GetFiles().Length == 0 && parent.GetDirectories().Length == 0 )
{
current = parent;
current.Delete();
}
else
{
break;
}
}
遍历当前目录树,删除所有空的父目录。
通过它的外观,您正在试图删除任何不包含文件的文件夹。我相信这对你有帮助。我用一个小文件夹集测试了它,它有5层深,在几个位置有一个文件。所有没有文件的文件夹都被删除。所有文件都完好无损。一个小的调整片段发现…谢谢Matt Smith。不能删除带有directory的目录。Delete(path, true)
string[] dirs = System.IO.Directory.GetDirectories(Directory.GetCurrentDirectory(), "*.*",SearchOption.AllDirectories);
foreach (string d in dirs)
{
if (System.IO.Directory.Exists(d)) {
if (System.IO.Directory.GetFiles(d, "*.*", SearchOption.AllDirectories).Length == 0)
{
DeleteDirectory(d);
}
}
}
public static void DeleteDirectory(string target_dir)
{
string[] dirs = Directory.GetDirectories(target_dir);
foreach (string dir in dirs)
{
DeleteDirectory(dir);
}
Directory.Delete(target_dir, false);
}
这将删除指定目录下的所有空文件夹
https://stackoverflow.com/a/16688997/2408998