Menú de navegaciónMenú
Categorías

La mejor forma de Aprender Programación online y en español www.campusmvp.es

Cómo leer y escribir archivos de texto con .NET

ArchivosUno de los objetivos de cualquier plataforma de programación es ofrecer servicios de bajo nivel para tareas comunes que cualquier programador pueda necesitar. Es decir, nos evita "reinventar la rueda" todo el tiempo, proporcionándonos cientos de tareas y utilidades ya hechas.

Gracias a ello, tareas como la que nos ocupan (y otras muchísimo más complejas) son extremadamente fáciles.

En este caso, para leer y escribir archivos de texto a disco podemos utilizar las clases StreamReader y StreamWriter respectivamente. Vamos a verlo.

Ambas clases están incluidas en el espacio de nombres llamado System.IO (un espacio de nombres es una forma de agrupar funcionalidad en .NET).  Por lo tanto debemos indicar que queremos usar dicho espacio de nombres mediante una sentencia using:

using System.IO;

Es importante no olvidarse o se producirá un error.

A continuación solo hay que crear un nuevo objeto de tipo StreamReader si vamos a leer un archivo, o StreamWriter si vamos a escribirlo. A continuación dispondremos de varios métodos sencillos para trabajar con ellos.

En el caso de la clase StreamWriter podemos destacar:

  • Write: escribe la información que le pasemos al archivo. Existen diversas sobrecargas de la función para distintos tipos de datos. En la práctica esto significa que no nos tenemos que preocupar de qué le pasamos a este método, que mientras sea un dato básico va a funcionar bien.
  • WriteLine: igual al anterior pero introduce un cambio de línea al final de la escritura. Esto es muy útil para generar archivos de log y similares, en los que nos interesa tener una línea por cada cosa que anotemos, sin preocuparnos de introducirla nosotros.
  • Close: cierra el archivo una vez que terminemos de trabajar con él.

Y en el caso de StreamReader destacamos:

  • ReadLine: lee el archivo línea a línea.
  • ReadToEnd: lee el contenido completo del archivo.
  • Close: cierra el archivo una vez no necesitemos leerlo más.

Por ejemplo, vamos a definir una función sencilla para escribir un determinado texto dentro de un archivo. El código necesario sería el siguiente:

public static void EscribeEnArchivo(string contenido, string rutaArchivo, bool sobrescribir = true)
{
    StreamWriter sw = new StreamWriter(rutaArchivo, !sobrescribir);
    sw.Write(contenido);
    sw.Close();
}

Como vemos el código no podría ser más sencillo:

  • Se abre el archivo creando un StreamWriter pasándole la ruta. Como segundo parámetro le indicamos si queremos añadir texto al archivo cuando escribamos, o sobrescribirlo, es decir, lo contrario de lo que se indica con el parámetro opcional "sobrescribir" que se le pasa a la función (de ahí el ! delante).
  • Escribimos el contenido en el archivo con Write.
  • Cerramos el archivo con Close() para que no quede bloqueado.

¡Muy fácil!

En realidad, la mejor forma de hacerlo sería asegurándonos de que siempre se cierra el archivo aunque se produzca un error, para lo cual meter un try-catch-finally sería lo indicado, pero no lo haremos para no perder el foco de lo que nos ocupa.

Ahora podemos escribir cualquier contenido de texto a un archivo haciendo una llamada como esta:

LeerYEscribirArchivos.EscribeEnArchivo("Prueba de texto\r\nOtra línea.", "D:\\Prueba.txt");

Nota: Fíjate en cómo hemos escrito la ruta del archivo, en el que las barras inclinadas hacia la izquierda deben duplicarse, ya que se trata de un carácter de escape. Si no lo hacemos se producirá un error. Otra opción sería usar la sintaxis literal de las cadenas, con una @ delante, así: @"D:\Prueba.txt. Del mismo modo los caracteres "escapeados"  \r\n indican un cambio de línea en el texto de prueba que estamos guardando.

Leer el archivo es de lo más simple también. Al igual que antes solo necesitamos crear la clase adecuada y llamar a un método. Por ejemplo, esta función:

public static string LeeArchivo(string rutaArchivo)
{
    StreamReader sr = new StreamReader(rutaArchivo);
    string contenido = sr.ReadToEnd();
    sr.Close();
    return contenido;
}

En este caso creamos el StreamReader pasándole la ruta del archivo que nos interesa al constructor, leemos todo el contenido de golpe con ReadToEnd, cerramos el archivo y devolvemos lo que hemos leído como resultado de la función.

¡Es muy sencillo!

Evidentemente esto es un ejemplo muy simplificado y no hemos metido controles de excepciones para reaccionar ante situaciones como, por ejemplo, que no tengamos permisos para leer o escribir el archivo, y cosas por el estilo. Pero de este modo podemos ver como se hace esta tarea tan sencilla.

Si quieres puedes descargar el proyecto de ejemplo para Visual Studio (ZIP, 32KB).

Más información:

José M. Alarcón Aguín Fundador de campusMVP, es ingeniero industrial y especialista en consultoría de empresa. Ha escrito diversos libros, habiendo publicado hasta la fecha cientos de artículos sobre informática e ingeniería en publicaciones especializadas. Microsoft lo ha reconocido como MVP (Most Valuable Professional) en desarrollo web desde el año 2004 hasta la actualidad. Puedes seguirlo en Twitter en @jm_alarcon o leer sus blog técnico o personal. Ver todos los posts de José M. Alarcón Aguín
Archivado en: Lenguajes y plataformas

Boletín campusMVP.es

Solo cosas útiles. Una vez al mes.

🚀 Únete a miles de desarrolladores

DATE DE ALTA

x No me interesa | x Ya soy suscriptor

La mejor formación online para desarrolladores como tú

Comentarios (3) -

Pedro Luna
Pedro Luna

O también se puede optar por las alternativas más simples:
File.ReadAllBytes(), File.ReadAllText(), File.ReadAllLines();
así como, File.WriteAllBytes(), File.WriteAllText() y File.WriteAllLines()...

Responder

José Manuel Alarcón
José Manuel Alarcón

Hola pedro:

Claro, hay muchas formas de hacerlo. Me pareció más interesante meter los lectores y escritores de Stream porque no solo sirven para archivos sino para otras cuestiones, mientras que las que sugieres están muy atadas al sistema de archivos de Windows.

Gracias por la aportación.

Saludos

Responder

Buenas,

y para hacer generación masiva de ficheros ¿ Cual es el mejor?

Gracias

Responder

Agregar comentario

Los datos anteriores se utilizarán exclusivamente para permitirte hacer el comentario y, si lo seleccionas, notificarte de nuevos comentarios en este artículo, pero no se procesarán ni se utilizarán para ningún otro propósito. Lee nuestra política de privacidad.