Why a BinaryWriter closes the outer Stream on disposal, and how to prevent that? (.NET C#)

后端 未结 4 1794
天命终不由人
天命终不由人 2020-12-06 09:06

I have one method that receives a Stream to write on it using a BinaryWriter. But when I dispose this BinaryWriter it also closes the stream. Can I leave it undisposed so I

相关标签:
4条回答
  • 2020-12-06 09:34

    Just do not call Dispose, use Flush instead, its safe.

    0 讨论(0)
  • 2020-12-06 09:36

    In the case of BinaryWriter, that isn't a direct option (although some stream wrappers do allow you to control this, for example GZipStream etc).

    Jon has a NonClosingStreamWrapper in MiscUtil which should work: you wrap your stream in the non-closing wrapper, and give the wrapper to BinaryWriter. This essentially passes through everything except Close() and Dispose().

    0 讨论(0)
  • 2020-12-06 09:48

    The protected BinaryWriter.Dispose(bool) method is virtual, and all it does is closes the stream (you can check that it is true in Reflector). -This method is called by the Dispose() method.

    You can simply inherit a class from the BinaryWriter and override the Dispose(bool) method to do nothing, or something else alltogether.

    0 讨论(0)
  • 2020-12-06 09:54

    As of .NET 4.5, the BinaryWriter class has a new constructor that takes a boolean parameter to indicate whether to leave the stream open or not.

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

    public BinaryWriter(
        Stream output,
        Encoding encoding,
        bool leaveOpen
    )
    
    0 讨论(0)
提交回复
热议问题