创建然后删除文件导致IOException

时间:2012-08-08 10:49:43

标签: c# .net

应用程序需要在目录中创建文件,在目录中执行某些操作,然后删除该文件。例如,下面的源代码:

File.Create("textfile.txt");
// Do something here
File.Delete("textfile.txt");

如果“某事”是一个只需要很短时间的进程,File.Delete将抛出IOException(另一个进程正在使用该文件)。根据另一个SO帖子:Cannot delete directory with Directory.Delete(path, true),调用Thread.Sleep(0)应该允许前一个过程完成。但是,即使有了

File.Create("textfile.txt");
// Do something here
Thread.Sleep(0);
File.Delete("textfile.txt");

仍然会抛出相同的IOException。

我得到的解决方案是一个while循环,尝试重复删除文件,直到它被删除。但我想知道这是否是一个更好的解决方案。

4 个答案:

答案 0 :(得分:21)

File.Create方法将创建一个文件流,您需要正确处理它。我建议使用以下代码:

using(FileStream fs = File.Create("textfile.txt"))
{
    // Do something here.
}
File.Delete("textfile.txt");

请注意,此代码完全按照MSDN文档中的建议...

答案 1 :(得分:16)

File.Create返回一个FileStream,它表示该文件的打开句柄。将该调用的结果包含在using-block中以确定性地关闭句柄。

答案 2 :(得分:4)

另请注意:如果您不想在文件中写入任何内容,可以通过两种方式避免“使用”:

(1) File.WriteAllText("textfile.txt", string.Empty);
(2) File.Create("textfile.txt").Dispose();

在情况(2)中,避免使用是安全的,因为你没有做任何可能在创建它和处理它之间抛出异常。

答案 3 :(得分:3)

File.Create返回一个FileStream,它是该文件的打开句柄。请改用:

using(FileStream fs = File.Create("textfile.txt"))
{}

File.Delete("textfile.txt");