【问题标题】:Any possiblilities that objects may be disposed earlier?对象可以更早处置的任何可能性?
【发布时间】:2014-03-26 09:17:09
【问题描述】:

fileStream 对象是否有可能在调用下面的 Close 方法之前被销毁?

FileStream fileStream = new FileStream(xxx);
StreamReader txtReader = new StreamReader(fileStream);

curLog = txtReader.ReadToEnd();

txtReader.Close();
fileStream.Close();

【问题讨论】:

  • 是的,txtReader.Close() 调用也会关闭 fileStream :) 否则,不会。
  • 那么这是一个错误吗?会抛出异常吗?
  • 这完全是设计使然。不会抛出异常。不得不猜测这个问题的原因是相当令人厌烦的顺便说一句。
  • @user3462253 请注意,one StreamReader constructor 允许您控制它是否关闭底层流本身(以防您需要这种行为)

标签: c# filestream streamreader


【解决方案1】:

fileStream 对象是否有可能被销毁 在调用 Close 方法之前,如下所示?

没有。

但你永远不应该编写这样的代码。您应该始终将 IDisposable 资源包装在 using 语句中,以确保即使抛出异常也会释放它们并且不会泄漏句柄。

using (FileStream fileStream = new FileStream(xxx))
using (StreamReader txtReader = new StreamReader(fileStream))
{
    curLog = txtReader.ReadToEnd();
}

但是对于这个特定示例,您可以简单地使用ReadAllText 方法。

string curLog = File.ReadAllText(xxx);

【讨论】:

  • 没错,我只是添加了这个。
【解决方案2】:

不,在那之前它不可能关闭。我建议像这样使用它

FileStream fileStream = new FileStream(xxx);
using (StreamReader txtReader = new StreamReader(fileStream))
{
            curLog = txtReader.ReadToEnd();
}

【讨论】:

  • 由于StreamReader默认关闭底层流,所以不需要外层使用。
猜你喜欢
  • 2011-08-17
  • 2014-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多