由于错误,无法删除临时文件

时间:2016-09-08 19:19:15

标签: c# .net

我在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);
}

2 个答案:

答案 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 有一个外部进程挂在该文件上,这将无法正常工作,否则它将执行您想要的操作