Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.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# 为什么需要关闭文件.Create?_C#_.net - Fatal编程技术网

C# 为什么需要关闭文件.Create?

C# 为什么需要关闭文件.Create?,c#,.net,C#,.net,以下抛出异常“进程无法访问文件“D:\MyDir\First.txt”,因为它正被另一个进程使用。” 然而,以下工作: using (File.Create(@"D:\MyDir\First.txt")) { } 或 为什么??文件.Create中的哪些内容需要关闭?因为它打开了一个文件流,该文件流是一个管理一些操作系统低级资源的类,必须释放这些资源才能让其他线程甚至其他应用程序中的其他操作访问该文件。MSDN文档对此进行了解释: 此文件创建的FileStream对象 方法具有默认的File

以下抛出异常“
进程无法访问文件“D:\MyDir\First.txt”,因为它正被另一个进程使用。

然而,以下工作:

using (File.Create(@"D:\MyDir\First.txt"))
{ 
}


为什么??
文件.Create
中的哪些内容需要关闭?

因为它打开了一个文件流,该文件流是一个管理一些操作系统低级资源的类,必须释放这些资源才能让其他线程甚至其他应用程序中的其他操作访问该文件。

MSDN文档对此进行了解释:

此文件创建的FileStream对象 方法具有默认的FileShare值 没有;不能使用其他进程或代码 访问创建的文件,直到 原始文件句柄已关闭


基本上,在文件创建关闭之前,其他进程无法访问该文件(在本例中,您尝试写入该文件)。

file.create
所做的比您想象的要多。它不仅创建文件,还将一个活动流返回到文件。但是,您不能对该流执行任何操作。后一个示例中的
using
块通过处理该流来关闭该流

还要注意,这是关于返回值的重要线索:

File.Create(@"D:\MyDir\First.txt").Close();
(当我第一次读到你的问题时,这对我来说并不直观,但回头看,这行代码实际上说明了一切。)

下一步,调用
File.WriteAllText
也比您想象的要多。据它称:

创建新文件,将指定的字符串写入该文件,然后关闭该文件


因此,这里似乎并不需要调用
File.Create
调用。

您实际上不需要调用
File.Create()
就可以调用
File.writealText()

File.WriteAllText()
将创建一个新文件并写入其中,然后用一种简便的方法关闭该文件


如果文件已经存在,它将被覆盖。

file.Create(string)
返回保持文件打开状态的FileStream对象。即使您没有在变量中保留对FileStream对象的引用,它仍然存在。该对象可用于垃圾收集,当垃圾收集发生时,文件将被关闭,但无法预测垃圾收集将在何时发生。

+1请注意,它返回一个
FileStream
,并且是冗余的。可能是
File.Create(@"D:\MyDir\First.txt").Close();
File.Create(@"D:\MyDir\First.txt").Close();