Saltar al contenido

¿Cuál es la diferencia entre StreamWriter.Flush() y StreamWriter.Close()?

Te doy la bienvenida a nuestra página, aquí vas a hallar la resolución de lo que estás buscando.

Solución:

StreamWriter.Flush() se puede llamar en cualquier momento que necesite borrar el búfer, y la transmisión permanecerá abierta.

StreamWriter.Close() es para cerrar la secuencia, momento en el que también se vacía el búfer.

Pero realmente no debería necesitar llamar a ninguno de estos. Cada vez que veo un .Close() en el código, tomo eso como un olor a código, porque generalmente significa que una excepción inesperada podría hacer que el recurso quede abierto. Lo que tu debería hacer, es crear tu StreamWriter variable en un bloque de uso, así:

using (var writer = new StreamWriter("somefilepath.txt"))

   // write a bunch of stuff here
 // the streamwriter WILL be closed and flushed here, even if an exception is thrown.

StreamWriter.Flush() vaciará cualquier cosa en el Stream al archivo. Esto se puede hacer en medio del uso de Stream y puede continuar escribiendo.

StreamWriter.Close() cierra el Stream para escribir. Esto incluye Flushing the Stream por última vez.

Sin embargo, hay una mejor manera de hacer las cosas. Dado que StreamWriter implementa IDisposablepuede envolver el StreamWriter en un using bloquear.

using(StreamWriter sw = new StreamWriter(stream))

     // Work with things here

Después de la using bloquear, Dispose se llamará… que vaciará y cerrará el flujo por usted.

Tuve un caso en el que estaba escribiendo un largo string a un StreamWriter con un MemoryStream subyacente. El MemoryStream estaba siendo consumido por otra cosa antes de que el escritor y el flujo fueran eliminados.

using (var memoryStream = new MemoryStream())
using (var streamWriter = new StreamWriter(memoryStream , Encoding.UTF8))

    streamWriter.Write(someRealyLongStringValue);
    DoSomethingWithTheStream(memoryStream );

Con cuerdas muy largas al final de la string estaba siendo truncado. Esto se resolvió llamando a flush antes de usar la transmisión. Alternativamente, podría haber configurado AutoFlush para true.

Reseñas y valoraciones del artículo

Recuerda algo, que tienes concesión de explicar si diste con el hallazgo.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *