Abrir y cerrar archivos de forma segura con el uso de
Para trabajar con un archivo en C#, primero debe abrirlo . Al abrir un archivo, se obtiene un objeto de flujo, como StreamReader o StreamWriter, del que se lee o en el que se escribe. Cuando haya terminado, debe cerrar el archivo para que el sistema operativo pueda liberar sus recursos y se guardan las escrituras pendientes.
El problema con olvidar cerrar un archivo
Puede abrir un archivo con StreamReader y cerrarlo con .Close().
StreamReader reader = new StreamReader("notes.txt");
string contents = reader.ReadToEnd();
Console.WriteLine(contents);
reader.Close();
El problema es que si se produce un error después de abrir el archivo pero antes de cerrarlo, el archivo permanece abierto, lo que puede provocar pérdidas de datos, archivos bloqueados o pérdidas de recursos.
Uso de la instrucción using
La forma más segura de trabajar con archivos en C# es la using instrucción . Cierra automáticamente el archivo cuando finaliza el bloque, incluso si se produce un error.
using (StreamReader reader = new StreamReader("notes.txt"))
{
string contents = reader.ReadToEnd();
Console.WriteLine(contents);
} // File is automatically closed here
C# moderno también admite una declaración using más corta que cierra el archivo al final del ámbito envolvente, sin necesidad de sus propias llaves.
using StreamReader reader = new StreamReader("notes.txt");
string contents = reader.ReadToEnd();
Console.WriteLine(contents);
// File is automatically closed at the end of this block
La clase File: una opción aún más sencilla
Para muchas tareas comunes, la File clase proporciona métodos estáticos que abren, leen o escriben y cierran un archivo en una sola llamada, sin necesidad de una instrucción explícita using en absoluto.
string contents = File.ReadAllText("notes.txt");
Console.WriteLine(contents);
Note
En segundo plano, File.ReadAllText() todavía se abre y cierra el archivo de forma segura. Recurra a estos métodos de File para realizar operaciones sencillas de lectura y escritura, y use StreamReader o StreamWriter con `using` cuando necesite un mayor control, por ejemplo, para leer línea por línea.
Un valor predeterminado más seguro
Sea cual sea el enfoque que elija, evite invocar .Close() usted mismo. Use usingo un File método que lo controle por usted.