繁体   English   中英

递归删除 C# 中的文件和目录

[英]Recursive delete of files and directories in C#

如何在 C# 中递归删除给定目录? 包含文件的目录。

System.IO.Directory.Delete与第二个参数true是否可以解决问题?


编辑:

所以,我实际上确实回答了我自己的问题,尽管这里的答案更加清晰。 我首先提出这个问题的原因是,恰好调用Delete (第二个参数设置为true )的代码没有做它应该做的事情。 事实证明,其原因是在目录层次结构中的某个位置设置了RO属性,而波兰语版本的Windows XP正在为此抛出一个非常奇怪的消息。

如果子目录还包含文件,唯一对我有用的解决方案是使用递归函数:

    public static void RecursiveDelete(DirectoryInfo baseDir)
    {
        if (!baseDir.Exists)
            return;

        foreach (var dir in baseDir.EnumerateDirectories())
        {
            RecursiveDelete(dir);
        }
        baseDir.Delete(true);
    }

看起来 Directory.Delete(dir, true) 只删除当前目录的文件,如果它们是空的子目录。

希望它可以帮助某人。

顺便说一句,例如: RecursiveDelete( new DirectoryInfo(@"C:\\my_dir") );

是的,这就是该参数的重点。 您是否尝试过并遇到任何问题? (我刚刚仔细检查过,它对我来说很好用。)

如果您收到 UnauthorizedAccessException 。 您可以使用Jone PolvoraRecursiveDelete 的修改。 谢谢你的想法。 我会用的。

    public static void RecursiveDelete(DirectoryInfo baseDir)
    {
        if (!baseDir.Exists)
            return;

        foreach (var dir in baseDir.EnumerateDirectories())
        {
            RecursiveDelete(dir);
        }
        var files = baseDir.GetFiles();
        foreach (var file in files)
        {
            file.IsReadOnly = false;
            file.Delete();
        }
        baseDir.Delete();
    }

递归适用于文件和文件夹(奇怪的是,我认为它不适用于文件;我的坏...):

// create some nested folders...
Directory.CreateDirectory(@"c:\foo");
Directory.CreateDirectory(@"c:\foo\bar");
// ...with files...
File.WriteAllText(@"c:\foo\blap.txt", "blup");
File.WriteAllText(@"c:\foo\bar\blip.txt", "blop");
// ...and delete them
Directory.Delete(@"c:\foo", true); // fine

来自@StayOnTarget 的修改解决方案,因此不会删除根目录:

public static void RecursiveDelete(DirectoryInfo baseDir, bool isRootDir)
{
    if (!baseDir.Exists)
        return;
    foreach (var dir in baseDir.EnumerateDirectories()) RecursiveDelete(dir, false);
    foreach (var file in baseDir.GetFiles())
    {
        file.IsReadOnly = false;
        file.Delete();
    }
    if (!isRootDir) baseDir.Delete();
}

为什么不使用?

Directory.Delete(directoryPath, true);

https://msdn.microsoft.com/en-us/library/fxeahc5f(v=vs.110).aspx

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM