为什么BinaryWriter会在处置时关闭外部流,以及如何防止这种情况发生? (.NET C#)

时间:2009-07-05 20:55:30

标签: c# .net stream binarywriter

我有一个方法接收使用BinaryWriter在其上写入的Stream。但是当我处理这个BinaryWriter时,它也会关闭流。我可以不妥协地把它留下来,这样我可以把我的小溪打开吗?

4 个答案:

答案 0 :(得分:54)

从.NET 4.5开始,BinaryWriter类有一个新的构造函数,它接受一个布尔参数来指示是否打开流。

参考:http://msdn.microsoft.com/en-us/library/gg712841.aspx

public BinaryWriter(
    Stream output,
    Encoding encoding,
    bool leaveOpen
)

答案 1 :(得分:21)

对于BinaryWriter,这不是直接选项(尽管某些流包装器允许您控制它,例如GZipStream等)。

Jon在MiscUtil中有一个NonClosingStreamWrapper应该可以工作:你将你的流包装在非关闭包装器中,并将包装器提供给BinaryWriter。这基本上会传递除Close()Dispose()之外的所有内容。

答案 2 :(得分:9)

只是不要调用Dispose,而是使用Flush,它是安全的。

答案 3 :(得分:9)

受保护的BinaryWriter.Dispose(bool)方法是虚拟的,它所做的就是关闭流(您可以在Reflector中检查它是否为真)。 - 这个方法由Dispose()方法调用。

你可以简单地从BinaryWriter继承一个类,并覆盖Dispose(bool)方法,什么都不做,或者别的什么都没有。