2009-07-05 9 views

Respuesta

10

Simplemente no llame a Dispose, use Flush en su lugar, es seguro.

+0

Sí, lo revisé en Reflector y es cierto. –

+4

Es seguro _today_. ¿Vas a usar Reflector en alguna versión de .NET para asegurarte de que continúe siendo seguro? Esta no es una solución. -1. –

+2

Siempre será seguro. Solo por la semántica del escritor. Simplemente piense por qué se ha dispuesto por ahora (consulte los ejemplos en msdn). También tenga en cuenta que este no es el único lugar en .NET que usa incorrectamente IDisposable, por ejemplo, bien conocido Dispose problem with WCF channels. –

21

En el caso de BinaryWriter, esa no es una opción directa (aunque algunas envolturas de flujo no le permiten controlar esto, por ejemplo GZipStream, etc.).

Jon tiene un NonClosingStreamWrapper en MiscUtil que debería funcionar: usted envuelve su flujo en el envoltorio que no cierra, y le da el envoltorio al BinaryWriter. Esto esencialmente pasa por todo, excepto Close() y Dispose().

+0

gran biblioteca, buen trabajo! –

+0

Enlace roto: http://www.yoda.arachsys.com/csharp/miscutil/ – colithium

+0

¿No crees que hay un poco de hack? ¿Sugiere cambiar el comportamiento (y las suposiciones) de BinnaryWriter engañándolo con wrapper? –

9

El método protegido BinaryWriter.Dispose (bool) es virtual, y todo lo que hace es cerrar la secuencia (puede verificar que sea verdadero 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 más alltogether.

47

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 
) 
+0

Me alegro de que haya proporcionado esta información más reciente. ¡Gracias! –

Cuestiones relacionadas