【发布时间】:2010-11-08 06:15:54
【问题描述】:
我有一种方法可以接收 Stream 以使用 BinaryWriter 对其进行写入。但是当我处理这个 BinaryWriter 时,它也会关闭流。我可以不处理它,以便让我的信息流保持打开状态吗?
【问题讨论】:
标签: c# .net stream binarywriter
我有一种方法可以接收 Stream 以使用 BinaryWriter 对其进行写入。但是当我处理这个 BinaryWriter 时,它也会关闭流。我可以不处理它,以便让我的信息流保持打开状态吗?
【问题讨论】:
标签: c# .net stream binarywriter
从 .NET 4.5 开始,BinaryWriter 类有一个新的构造函数,它接受一个布尔参数来指示是否让流保持打开状态。
参考:http://msdn.microsoft.com/en-us/library/gg712841.aspx
public BinaryWriter(
Stream output,
Encoding encoding,
bool leaveOpen
)
【讨论】:
在BinaryWriter 的情况下,这不是一个直接选项(尽管某些流包装器确实允许您控制它,例如GZipStream 等)。
Jon 在MiscUtil 中有一个 NonClosingStreamWrapper,它应该可以工作:您将流包装在非关闭包装器中,并将包装器提供给 BinaryWriter。这基本上会通过除Close() 和Dispose() 之外的所有内容。
【讨论】:
BinaryWriter 相关的根本没有任何改变;它将值写入流并告诉流何时完成。关心扩展您的想法吗?这肯定比不处理 IDisposable 的东西要很多,因为你偷看了实现并决定否决它......
只是不要调用 Dispose,而是使用 Flush,它是安全的。
【讨论】:
BinaryWriter 不像FileStream 那样在Finalize 中调用Dispose。这种行为意味着BinaryWriter.Dispose 是可选的。
受保护的 BinaryWriter.Dispose(bool) 方法是虚拟的,它所做的只是关闭流(您可以在Reflector 中检查它是否为真)。 - 该方法由 Dispose() 方法调用。
您可以简单地从 BinaryWriter 继承一个类并重写 Dispose(bool) 方法以不执行任何操作,或者一起执行其他操作。
【讨论】: