30

我有一种方法可以接收 Stream 以使用 BinaryWriter 在其上写入。但是当我处理这个 BinaryWriter 时,它也会关闭流。我可以让它保持原样,以便我可以打开我的流吗?

4

4 回答 4

59

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

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

public BinaryWriter(
    Stream output,
    Encoding encoding,
    bool leaveOpen
)
于 2012-08-21T17:24:59.260 回答
21

在 的情况下BinaryWriter,这不是一个直接选项(尽管某些流包装器确实允许您控制它,例如GZipStream等)。

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

于 2009-07-05T20:57:23.007 回答
9

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

于 2009-07-05T21:03:58.733 回答
9

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

您可以简单地从 BinaryWriter 继承一个类并重写 Dispose(bool) 方法以不执行任何操作,或者一起执行其他操作。

于 2009-07-05T21:04:48.793 回答