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

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

编辑:我的意思是一个包含文件的目录:D抱歉误入歧途。

编辑2:所以,我确实回答了我自己的问题,虽然这里的答案更加澄清。 我首先要问这个问题的原因是,完全调用Delete(第二个参数设置为true)的代码没有按照预期的那样进行。 事实certificate,原因是目录层次结构中有一个文件设置了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") );

文件和文件夹的递归工作(奇怪的是,我认为它不适用于文件;我的错…):

 // 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 

为什么不用?

Directory.Delete(directoryPath,true);

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

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

  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(); }