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

Bar*_*ski 15 c#

如何在C#中递归删除给定的dir?具有第二个参数true的System.IO.Directory.Delete是否应该执行该操作?

编辑:我的意思是一个包含文件的目录:D对不起有误.

编辑2:所以,我确实回答了我自己的问题,虽然这里的答案更加澄清.我首先要问的原因是,完全调用Delete(第二个参数设置为true)的代码没有按照预期的那样进行.事实证明,原因是在目录层次结构中有一个文件位置设置了RO属性,并且波兰语版本的Windows XP为此抛出了一个非常奇怪的消息.

Jon*_*ora 22

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

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

        foreach (var dir in baseDir.EnumerateDirectories())
        {
            RecursiveDelete(dir);
        }
        baseDir.Delete(true);
    }
Run Code Online (Sandbox Code Playgroud)

似乎Directory.Delete(dir,true)仅删除当前目录的文件,如果它们为空则删除子目录.

希望它可以帮助某人.

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


Jon*_*eet 13

是的,这就是那个参数的重点.你有没有尝试过并有任何问题?(我只是仔细检查过,对我来说效果很好.)

  • 虽然它值得确保您的路径中没有只读文件/目录.这让我一时间遇到了一些问题. (3认同)
  • 如果子目录还包含文件,则对我不起作用。 (2认同)

Mar*_*ell 6

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

// 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
Run Code Online (Sandbox Code Playgroud)


Кон*_*лин 6

如果得到UnauthorizedAccessException。您可以使用修改的RecursiveDelete卓尼Polvora。谢谢你的想法。我会用它。

    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();
    }
Run Code Online (Sandbox Code Playgroud)