8

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

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

4 回答 4

21

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

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

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

于 2012-08-08T10:53:10.287 回答
16

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

于 2012-08-08T10:52:13.270 回答
4

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

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

在情况(2)中,避免使用是安全的,因为您没有做任何可能在创建它和处置它之间引发异常的事情。

于 2012-08-08T10:59:40.350 回答
3

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

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

File.Delete("textfile.txt");
于 2012-08-08T10:53:48.100 回答