当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《删除没有特定扩展名文件的所有文件夹和子目录》经验,为你挑选了1个好方法。

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

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扩展名文件.

例如,我的文件夹包含以下文件:

一个日志

博客

c.dvr

d.dat

因此,无法删除此文件夹,因为它包含带有dvr扩展名的文件.

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



1> René Vogt..:

不幸的是,错误处理在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;
}

推荐阅读
惬听风吟jyy_802
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有