什么时候需要file.close()?

Yul*_*a V 5 c# file-io

我想知道是否有必要Close()在下列情况下打电话(如果没有必要,为什么?)

using (var file = System.IO.File.OpenText(myFilePath))
{
...
}
Run Code Online (Sandbox Code Playgroud)

我认为在以下情况下是必要的

StreamWriter file2 = new System.IO.StreamWriter(myFilePath);
newFileContents.ForEach(file2.WriteLine);
file2.Close();
Run Code Online (Sandbox Code Playgroud)

这是对的吗?

编辑:

我认为我的问题很接近() - 具体,可能是阅读和写作之间的区别....

Pau*_*sik 9

使用该using构造,您将IDisposable.Dispose在代码块的末尾自动调用,该代码块将关闭该文件.如果您不使用该using声明,则必须自行调用Close.

随着using你也自动获得内置的try /最后的异常处理,这将表现得更加优雅,如果您退出之前出现错误using块.这是使用的另一个原因using是一个好主意,而不是自己滚动.

在您的情况下,using构造是速记:

StreamWriter file2 = new System.IO.StreamWriter(myFilePath);
try
{
   newFileContents.ForEach(file2.WriteLine);
}
finally
{
   if (file2!= null)
       ((IDisposable)file2).Dispose();
}
Run Code Online (Sandbox Code Playgroud)

如果您反编译StreamWriter的Dispose实现,您将看到此调用(以及其他):

this.stream.Close();
Run Code Online (Sandbox Code Playgroud)

在最后一块(如果你需要绝对证明;-)