我在mscorlib.dll中遇到类型为System.IO.IOException
的未处理异常,因为我尝试删除的文件正由另一个进程使用。
我希望它跳过使用过的文件。
private void button1_Click(object sender, EventArgs e)
{
System.IO.DirectoryInfo directory =
new System.IO.DirectoryInfo(@"C:\Users\fatih\AppData\Local\Temp");
foreach (System.IO.FileInfo file in directory.GetFiles()) file.Delete();
foreach (System.IO.DirectoryInfo subDirectory in directory.GetDirectories())
subDirectory.Delete(true);
}
答案 0 :(得分:7)
如果删除所有内容并不重要,请使用:
private void button1_Click(object sender, EventArgs e)
{
string directory = @"C:\Users\fatih\AppData\Local\Temp";
deleteDirectory(directory);
}
private void deleteDirectory(string directory){
foreach (string file in Directory.GetFiles(directory))
{
try{
File.Delete(file);
}
catch(Exception e0){
Console.WriteLine(e0.Message+"\n"+e0.Source);//not necessary but nice to learn from
}
}
foreach (string direc in Directory.GetDirectories(directory)) {
deleteDirectory(direc);
Directory.Delete(direc,true);
}
}
这将简单地跳过任何有问题的文件或目录,并删除其他所有内容。
答案 1 :(得分:-2)
使用目录和文件方法的静态版本,你不能在file.delete上使用foreach,因为你试图对你正在循环的东西进行删除操作。
foreach (var file in Directory.GetFiles(directory))
{
File.Delete(file);
}
更新:我没有注意到子目录删除,这是你的问题,如果你想删除包括你所在目录在内的所有内容,那么你工作太辛苦了。
Directory.Delete(Directory, true);
将清除目录以及传入目录中的所有子目录和文件。
由于您仍然遇到问题,而且每个人似乎都认为我错在这里,我会将代码提供给您的解决方案。
private void button1_Click(object sender, EventArgs e)
{
string directory = @"C:\Users\fatih\AppData\Local\Temp")
Directory.Delete(directory, true);
}
IF 有一个外部进程挂在该文件上,这将无法正常工作,否则它将执行您想要的操作