应用程序需要在目录中创建文件,在目录中执行某些操作,然后删除该文件。例如,下面的源代码:
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循环,尝试重复删除文件,直到它被删除。但我想知道这是否是一个更好的解决方案。
答案 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");