TOC

This article is currently in the process of being translated into Spanish (~99% done).

File handling:

Reading and writing files

En este capítulo veremos cómo leer y escribir archivos simples con C#. Afortunadamente para nosotros, C# lo hace muy fácil. la clase File, del espacio de nombre System.IO viene con todo lo que nosotros podríamos querer, haciendo que sea realmente simple hacer lecturas y escrituras de un archivo.

En nuestro primero ejemplo, vamos a construir un editor de texto extremadamente minimalista. De hecho, es tan simple que solo podemos leer un archivo y después escribirle nuevo contenido, y solo una línea de texto a la vez. Pero esto muestra lo fácil que es usar la clase File:

using System;
using System.IO;

namespace FileHandlingArticleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            if(File.Exists("test.txt"))
            {
                string content = File.ReadAllText("test.txt");
                Console.WriteLine("Current content of file:");
                Console.WriteLine(content);
            }
            Console.WriteLine("Please enter new content for the file:");
            string newContent = Console.ReadLine();
            File.WriteAllText("test.txt", newContent);
        }
    }
}

Notarás que usamos la clase File en tres lugares: la usamos para verificar si nuestro archivo existe, usamos el método ReadAllText() para leer el contenido del archivo, y usamos el método WriteAllText() para escribir nuevo contenido al archivo. Además, te darás cuenta que no estoy usando rutas absolutas, sino que un simple nombre de archivo. Esto colocará el archivo en el mismo directorio que el archivo ejecutable, lo cual está bien por ahora. Además de eso, el ejemplo debería ser lo suficientemente fácil de entender: Se verifica el archivo, si existe, leemos su contenido y lo enviamos a la consola. Luego le pedimos al usuario el nuevo contenido, y una vez que lo tenemos, lo escribimos al archivo. Obviamente esto sobreescribirá el contenido previo, pero por ahora, eso está bien. Sin embargo, en vez de eso, podríamos usar el método AppendAllText. Intenta cambiar la linea de WriteAllText a esto en su lugar:

File.AppendAllText("test.txt", newContent);

Si lo ejecutas, verás que el nuevo texto es añadido al texto ya existente, en vez de sobreescribirlo. Tan simple como eso. Pero seguimos teniendo una sola línea de texto por ejecución de nuestra aplicación. Seamos un poco creativos y cambiemos eso. Remplaza las últimas líneas de nuestro ejemplo con esto:

Console.WriteLine("Please enter new content for the file - type exit and press enter to finish editing:");
string newContent = Console.ReadLine();
while(newContent != "exit")
{
    File.AppendAllText("test.txt", newContent + Environment.NewLine);
    newContent = Console.ReadLine();
}

Como puedes ver, hemos instruido al usuario a ingresar la palabra exit cuando él decida parar de editar el archivo, y hasta que precisamente haga eso, vamos a añadir las entradas del usuario al archivo y luego le pediremos una nueva línea. También añadimos un carácter de nueva línea, el Enviroment.NewLine, para hacerlas ver como verdaderas líneas de texto.

No obstante, en vez de escribir en el archivo cada vez, una solución más bonita probablemente luciría como esto:

Console.WriteLine("Please enter new content for the file - type exit and press enter to finish editing:");
using(StreamWriter sw = new StreamWriter("test.txt"))
{
    string newContent = Console.ReadLine();
    while(newContent != "exit")
    {
        sw.Write(newContent + Environment.NewLine);
        newContent = Console.ReadLine();
    }
}

El uso de Streams está un poco fuera de ámbito para este capítulo, pero lo genial sobre ellos en este ejemplo es que solo abrimos el archivo una vez, y hacemos los cambios hasta que estemos satisfechos. En este caso, estamos tomando ventaja de la declaración using() de C#, la cual asegura que la referencia del archivo se cierre una vez que se termine de usar, que sería donde el bloque {} se termina. Si no usas la declaración using(), tendrás que llamar al método Close() manualmente en la instancia del StreamWriter.


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!