【问题标题】:Why StreamWriter can't access the closed stream but StreamReader can?为什么 StreamWriter 不能访问关闭的流而 StreamReader 可以?
【发布时间】:2011-07-09 19:24:21
【问题描述】:

如果我写以下语句。

fileStream.Close();
reader.Close();
writer.Close();

reader.Close() 语句成功执行。但我收到错误“无法打开关闭的文件”。在第三条语句 writer.Close()

如果我写

fileStream.Close();
writer.Close();
reader.Close();

第二条语句,即 writer.Close() 本身会引发相同的异常。

有人知道吗?

【问题讨论】:

  • 我的猜测是作者可能正在尝试将内部缓冲区刷新到流中,而读者显然不需要这样做。
  • 作为“解决方案”,最后关闭流即可。但最好使用using(){} 块。

标签: c# filestream streamreader streamwriter


【解决方案1】:

我认为这是因为 writer 在关闭底层流之前调用了 flush()。

【讨论】:

    【解决方案2】:

    我将不得不猜测您的代码看起来类似于:

    FileStream fileStream = new FileStream(...);
    StreamWriter writer = new StreamWriter(fileStream);
    ...
    

    不要关闭 fileStream,流编写器现在“拥有”流。关闭它也会关闭文件流。

    【讨论】:

    • 但我当然会在 using 块中包装 both。 Stream.Dispose 将是一个虚拟对象,但只要它是最后一个就可以了。
    • @Henk - 好吧,点很可能是方法的最后一个大括号 }。不使用使用。这就是为什么 Close() 首先存在的原因。编程模式是合法的,尽管有点可疑。
    猜你喜欢
    • 2011-05-26
    • 2012-09-28
    • 1970-01-01
    • 2017-10-06
    • 2011-02-09
    • 1970-01-01
    • 1970-01-01
    • 2018-11-13
    相关资源
    最近更新 更多