【问题标题】:Why does Package not close underlying stream?为什么 Package 不关闭底层流?
【发布时间】:2016-06-27 11:56:43
【问题描述】:

我使用的是Package,用以下代码打开

Package package = Package.Open(stream, fileMode, fileAccess);

其中stream 基本上是MemoryStream。现在如果我打电话给package.Close(),内存流仍然是打开的。

当我使用重载方法打开时,我输入文件的路径并关闭包,文件句柄被释放。当我打开 StreamReader 并关闭它时,它会释放底层流。

为什么Package 类不释放底层流?

【问题讨论】:

  • 当你说它仍然打开时,你的意思是 CanRead/CanSeek/CanWrite 属性仍然是 true 还是你仍然可以访问 MemoryStream 缓冲区?跨度>
  • @FedericoDipuma 我有一个以内存流为基类的专用类,我基本上等待流关闭而不是做一些工作(将其写回文件系统)。如果流从未关闭,则不会发生这种情况。

标签: c# stream package dispose


【解决方案1】:

您制作了一个流 - 您打开了它,您制作了可以使用该流的东西。但是,流仍然存在。所以是的,您需要在

之后关闭并处理流

【讨论】:

  • 公平地说:有几个使用流的类会默认关闭流,例如 reader 和 writer,如果你想在完成后保留流,有时你必须采取奇怪的预防措施与作家。
  • 这同样适用于StreamReader 或任何其他仅使用流的包装器。但他们确实关闭了流。
  • 是的,但总的来说,它听起来好像没有关闭它......所以
  • @BugFinder 是的,当然,Captain Obvious :-) 尽管如此,当框架的某些部分自动关闭流而其他部分没有时,这个问题并不像你想象的那样愚蠢。答案当然是:那就自己关闭吧……
  • 我希望了解StreamReader like wrapper 和Package 类之间的不一致。
猜你喜欢
  • 2010-12-18
  • 1970-01-01
  • 2014-04-15
  • 1970-01-01
  • 1970-01-01
  • 2010-11-14
  • 1970-01-01
  • 2013-02-18
  • 2021-11-23
相关资源
最近更新 更多