如何在C#中递归删除给定的dir?具有第二个参数true的System.IO.Directory.Delete是否应该执行该操作?
编辑:我的意思是一个包含文件的目录:D抱歉误入歧途。
EDIT2:所以,我确实回答了我自己的问题,尽管这里的答案更加清晰。我首先要问的原因是,完全调用Delete(第二个参数设置为true)的代码没有按照预期的那样进行。事实证明,原因是目录层次结构中有一个文件设置了RO属性,并且波兰语版本的Windows XP为此抛出了一个非常奇怪的消息。
答案 0 :(得分:19)
如果子目录还包含文件,那么对我有用的唯一解决方案是使用递归函数:
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)只删除当前目录和子目录(如果它们为空)的文件。
希望它有所帮助。
btw,例如:RecursiveDelete( new DirectoryInfo(@"C:\my_dir") );
答案 1 :(得分:11)
是的,这就是那个参数的重点。你有没有尝试过并有任何问题? (我只是仔细检查过,对我来说效果很好。)
答案 2 :(得分:4)
文件和文件夹的递归工作(奇怪的是,我认为它对文件不起作用;我的不好......):
// 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
答案 3 :(得分:2)
如果您收到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();
}
答案 4 :(得分:1)
为什么不使用?
Directory.Delete(directoryPath,true);
https://msdn.microsoft.com/en-us/library/fxeahc5f(v=vs.110).aspx