C# 创建然后删除文件会导致IOException
应用程序需要在目录中创建文件,在目录中执行某些操作,然后删除该文件。例如,下面的源代码:C# 创建然后删除文件会导致IOException,c#,.net,C#,.net,应用程序需要在目录中创建文件,在目录中执行某些操作,然后删除该文件。例如,下面的源代码: File.Create("textfile.txt"); // Do something here File.Delete("textfile.txt"); 如果“某物”是一个只需要很短时间的进程,File.Delete将抛出IOException(另一个进程正在使用该文件)。根据另一个SO post:,调用Thread.Sleep(0)应该允许前一个进程完成。然而,即使 File.Create("tex
File.Create("textfile.txt");
// Do something here
File.Delete("textfile.txt");
如果“某物”是一个只需要很短时间的进程,File.Delete将抛出IOException(另一个进程正在使用该文件)。根据另一个SO post:,调用Thread.Sleep(0)应该允许前一个进程完成。然而,即使
File.Create("textfile.txt");
// Do something here
Thread.Sleep(0);
File.Delete("textfile.txt");
仍然会引发相同的IOException
我得到的解决方案是一个while循环,尝试重复删除文件,直到删除为止。但是我想知道是否有更好的解决方案。
File.Create
返回一个FileStream,它表示该文件的打开句柄。将该调用的结果包装在using块中,以确定地关闭句柄。该方法将创建一个文件流,您需要正确地处理该文件流。我建议使用以下代码:
using(FileStream fs = File.Create("textfile.txt"))
{
// Do something here.
}
File.Delete("textfile.txt");
请注意,此代码与MSDN文档中的建议完全相同…File.Create返回一个FileStream,它是该文件的一个打开句柄。改用这个:
using(FileStream fs = File.Create("textfile.txt"))
{}
File.Delete("textfile.txt");
另请注意:如果您不想将任何内容写入文件,可以通过两种方式避免“使用”:
(1) File.WriteAllText("textfile.txt", string.Empty);
(2) File.Create("textfile.txt").Dispose();
在案例(2)中,避免使用是安全的,因为您没有做任何可能在创建和处理它之间引发异常的事情。感谢您快速的回答(并指出它在MSDN上。我现在肯定感觉不太好)。我要和@usr一起去,因为他是第一个。但是请接受+1作为我的感谢。