Tengo un método que recibe un flujo para escribir en él usando un BinaryWriter. Pero cuando dispongo este BinaryWriter también cierra la transmisión. ¿Puedo dejarlo sin oposición para poder dejar mi flujo abierto?¿Por qué un BinaryWriter cierra el Stream externo en la eliminación, y cómo prevenir eso? (.NET C#)
¿Por qué un BinaryWriter cierra el Stream externo en la eliminación, y cómo prevenir eso? (.NET C#)
Respuesta
Simplemente no llame a Dispose, use Flush en su lugar, es seguro.
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()
.
gran biblioteca, buen trabajo! –
Enlace roto: http://www.yoda.arachsys.com/csharp/miscutil/ – colithium
¿No crees que hay un poco de hack? ¿Sugiere cambiar el comportamiento (y las suposiciones) de BinnaryWriter engañándolo con wrapper? –
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.
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
)
Me alegro de que haya proporcionado esta información más reciente. ¡Gracias! –
- 1. ¿Cómo "bifurco" un Stream en .NET?
- 2. BinaryReader asincrónico y BinaryWriter en .Net?
- 3. ¿Por qué hay una eliminación [] en C++?
- 4. Stream Reuse en C#
- 5. Cómo convertir System.Data.Linq.Binary en un Stream?
- 6. C# ¿Por qué form.Close() no cierra el formulario?
- 7. ¿Por qué Dapper dot net no abre y cierra la conexión?
- 8. ¿Cómo obtener un MemoryStream de un Stream en .NET?
- 9. ¿Por qué Scala Source no cierra el InputStream subyacente?
- 10. Prevenir Oracle menos el comunicado de la eliminación de duplicados
- 11. Prevenir enlazador de eliminación de variables globales
- 12. vhost.exe. ¿Por qué es eso necesario?
- 13. ¿Cómo se implementa el método Stream.CopyTo (Stream) en .NET 4?
- 14. StreamReader y StreamWriter en el mismo Stream?
- 15. Eliminación segura de un archivo en C# .NET
- 16. ¿Qué son las clases "string", "stream" y "stringstream" en C++?
- 17. Por qué filestream no cierra por xmlreader
- 18. Alias variable de C++: ¿qué es eso exactamente y por qué es mejor desactivarlo?
- 19. String Stream en C
- 20. BinaryWriter Endian problema
- 21. ¿por qué usar javascript externo?
- 22. ¿por qué obtengo java.io.IOException: Stream cerrado?
- 23. zlib de C++ a C# (Cómo convertir byte [] a stream y stream to byte [])
- 24. .NET - ¿Stream DataSet (de datos XML) a un archivo ZIP?
- 25. ¿Por qué C++ todavía tiene un delete [] Y un operador de eliminación?
- 26. Cómo prevenir la inyección de XPath/XML en .NET
- 27. ¿Por qué la ventana de pygame no se cierra correctamente?
- 28. Prevenir la aplicación C# del proceso kill
- 29. Eliminación de recursos en .NET
- 30. ¿Por qué el apio no se cierra limpiamente?
Sí, lo revisé en Reflector y es cierto. –
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. –
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. –