Sé que esto puede parecer tonto, pero ¿por qué el siguiente código solo funciona si cierro() el archivo? Si no cierro el archivo, la secuencia completa no se escribe.¿Por qué debo cerrar() un archivo en C#?
Pasos:
- ejecuta este código en forma de carga.
- Cerrar formulario usando el mouse una vez que se muestra.
- El programa finaliza.
¿No debería enjuagarse o cerrarse automáticamente el objeto de archivo cuando se sale del alcance? Soy nuevo en C#, pero estoy acostumbrado a agregar llamadas a Close() en destructores de C++.
// Notes: complete output is about 87KB. Without Close(), it's missing about 2KB at the end.
// Convert to png and then convert that into a base64 encoded string.
string b64img = ImageToBase64(img, ImageFormat.Png);
// Save the base64 image to a text file for more testing and external validation.
StreamWriter outfile = new StreamWriter("../../file.txt");
outfile.Write(b64img);
// If we don't close the file, windows will not write it all to disk. No idea why
// that would be.
outfile.Close();
Usted puede encontrar la discusión en http://blogs.msdn.com/b/oldnewthing/archive/ 2010/08/10/10048150.aspx para ser útil al proporcionar una explicación y justificación para las diferencias entre C# y C++. En general, compararía los destructores C++ con C# 'IDisposable' y' using {} '. Y, por supuesto, 'using' es más seguro que llamar' Close' o 'Dispose' explícitamente, ya que envuelve la llamada en un bloque' try-finally' para asegurar que el objeto sea eliminado. – Brian
Gracias, todos, por la ayuda clara y rápida. – Harvey