如何在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
是的,这就是那个参数的重点.你有没有尝试过并有任何问题?(我只是仔细检查过,对我来说效果很好.)
递归适用于文件和文件夹(奇怪的是,我认为它不适用于文件;我的坏...):
// 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)
如果得到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)
| 归档时间: |
|
| 查看次数: |
27794 次 |
| 最近记录: |