c# - 删除所有没有特定扩展名文件的文件夹和子目录

标签 c# directory gtk#

我正在使用此解决方案删除特定路径中的所有空文件夹和子目录:

static void Main(string[] args)
{
    processDirectory(@"c:\temp");
}

private static void processDirectory(string startLocation)
{
    foreach (var directory in Directory.GetDirectories(startLocation))
    {
        processDirectory(directory);
        if (Directory.GetFiles(directory).Length == 0 && 
            Directory.GetDirectories(directory).Length == 0)
        {
            Directory.Delete(directory, false);
        }
    }
}

它工作得很好。但我想删除所有空文件夹以及非空但不包含扩展名为 .dvr 的文件的文件夹。

例如我的文件夹有以下文件:

a.log

b.log

c.dvr

d.dat

所以这个文件夹不能删除,因为它包含一个扩展名为dvr的文件。

如何过滤? (我使用的是 GTK#,但我相信 C# 代码可以工作,因为这个解决方案是 C# 代码)

最佳答案

不幸的是,错误处理在 IO 操作中是非常基于异常的。如果目录不为空,则 Directory.Delete 会抛出 IOException。所以你必须手动删除文件:

private static bool processDirectory(string startLocation)
{
    bool result = true;
    foreach (var directory in Directory.GetDirectories(startLocation))
    {
        bool directoryResult = processDirectory(directory);
        result &= directoryResult;

        if (Directory.GetFiles(directory, "*.dvr").Any())
        {
             result = false;
             continue;
        }

        foreach(var file in Directory.GetFiles(directory))
        {
            try
            {
               File.Delete(file);
            }
            catch(IOException)
            {
               // error handling
               result = directoryResult = false;
            }
        }

        if (!directoryResult) continue;
        try
        {
            Directory.Delete(directory, false);
        }
        catch(IOException)
        {
            // error handling
            result = false;
        }
    }

    return result;
}

关于c# - 删除所有没有特定扩展名文件的文件夹和子目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34272173/

相关文章:

c# - 如何从 mvc3 模型的序列化 json 中获取backbone.js 模型?

c# - 从 GUI 应用程序将消息打印到控制台 - C#

c# - 是否允许在线程之间缓存/重用 Thread.GetNamedSlot?

c# - 测试 Web.Api ActionFilter 时模拟 HttpActionContext.ActionArguments

java - 返回java中的main方法

C# GTK 拖放

检查其他目录中的文件是否存在

Python 脚本适用于一个文件夹,但不适用于子文件夹。

c# - 更改 Gtk.Label.Text 并不总是有效

c# - 如何在 Mono (Mono.Cairo/GTK#) 中访问 Linux 帧缓冲区?