2

请查看以下代码:

new StreamWriter("c:/myText.txt").Write("Some thing...");

和,

using (var streamWriter = new StreamWriter("c:/myText.txt")
{
    streamWriter.Write("Some thing...");
}

创建文件的第一个代码但没有在其中写入“Something...”。但是第二个代码也可以工作并写进去。

为什么会出现这个问题?有什么不同?

4

2 回答 2

6

该类StreamWriter实现IDisposable,这意味着它拥有需要释放的资源,或者它具有一些需要在对象被垃圾收集之前运行的清理代码。

在这种情况下,调用Dispose会关闭流,可能会在此之前将最后一个数据写入流。

通过编码new StreamWriter("c:/myText.txt").Write("Some thing...");,您不会保留对流的引用,因此无法调用Dispose以正确关闭流。

请记住,垃圾收集器永远不会为您调用 dispose。您必须明确地这样做。

第二个代码块使用退出块时using将自动调用的语句。Dispose这是编写此代码的正确方法。

于 2012-10-14T06:05:47.960 回答
2

第一个应该是:

new StreamWriter("c:/myText.txt").Write("Some thing..."); 

第二个将完美地工作。第一个问题是您永远不会关闭流。这最终会发生(当程序终止时,或者当垃圾收集器最终完成时StreamWriter),但第一个将在块完成后正确关闭文件。

于 2012-10-14T05:32:31.230 回答