fellowship - ¿Por qué un BinaryWriter cierra el flujo externo en la eliminación y cómo evitar eso?(.NET C#)
eso oncology (4)
A partir de .NET 4.5, la clase BinaryWriter tiene un nuevo constructor que toma un parámetro booleano para indicar si dejar la secuencia abierta o no.
Ref: http://msdn.microsoft.com/en-us/library/gg712841.aspx
public BinaryWriter(
Stream output,
Encoding encoding,
bool leaveOpen
)
Tengo un método que recibe un flujo para escribir en él usando un BinaryWriter. Pero cuando dispongo este BinaryWriter también cierra la secuencia. ¿Puedo dejarlo sin mostrar para que pueda dejar abierta mi transmisión?
El método protegido BinaryWriter.Dispose (bool) es virtual, y todo lo que hace es cerrar el flujo (puede verificar que sea cierto en Reflector ). -Este método es llamado por el método Dispose ().
Simplemente puede heredar una clase del BinaryWriter y anular el método Dispose (bool) para no hacer nada, o algo completamente distinto.
En el caso de BinaryWriter
, eso no es una opción directa (aunque algunas envolturas de flujo le permiten controlar esto, por ejemplo, GZipStream
etc.).
Jon tiene un NonClosingStreamWrapper en MiscUtil que debería funcionar: envuelve su flujo en el contenedor que no cierra y le da el contenedor a BinaryWriter
. Esto esencialmente pasa por todo, excepto Close()
y Dispose()
.
Simplemente no llame a Dispose, use Flush en su lugar, es seguro.