删除文件夹,如果它是空的使用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);
    }
}

我的问题是如何让代码通过并检查每次删除后的文件夹,因为一旦它删除一个文件夹,它可以使父文件夹为空,然后应该被删除。一旦代码没有找到任何为空的文件夹或子文件夹,它将退出。

删除文件夹,如果它是空的使用c#

写一个深度优先递归函数。在完成每个递归调用时,检查当前文件夹是否为空。如果是,则删除。

像这样(伪代码)

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

相关文章: