我有一个方法接收使用BinaryWriter在其上写入的Stream。但是当我处理这个BinaryWriter时,它也会关闭流。我可以不妥协地把它留下来,这样我可以把我的小溪打开吗?
答案 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)方法,什么都不做,或者别的什么都没有。