Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 创建然后删除文件会导致IOException_C#_.net - Fatal编程技术网

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作为我的感谢。