7.4. Añadir a un fichero existente
La idea es sencilla: en vez de abrirlo con CreateText ("crear texto"), usaremos AppendText ("añadir texto"). Por ejemplo, podríamos crear un fichero, guardar información, cerrarlo, y luego volverlo a abrir para añadir datos, de la siguiente forma:
/*---------------------------*/ /* Ejemplo en C# nº 73 */ /* ejemplo73.cs */ /* */ /* Añadir en un fichero */ /* de texto */ /* */ /* Introduccion a C#, */ /* Nacho Cabanes */ /*---------------------------*/ using System; using System.IO; // Para StreamWriter public class Ejemplo73 { public static void Main() { StreamWriter fichero; fichero = File.CreateText("prueba2.txt"); fichero.WriteLine("Primera línea"); fichero.Close(); fichero = File.AppendText("prueba2.txt"); fichero.WriteLine("Segunda línea"); fichero.Close(); } }
Ejercicios propuestos:
- Un programa que pida al usuario que teclee frases, y las almacene en el fichero "registro.txt", que puede existir anteriormente (y que no deberá borrarse, sino añadir al final de su contenido). Cada sesión acabará cuando el usuario pulse Intro sin teclear nada.
7.5. Ficheros en otras carpetas
Si un fichero al que queremos acceder se encuentra en otra carpeta, basta con que indiquemos la ruta hasta ella, recordando que, como la barra invertida que se usa en sistemas Windows para separar los nombres de los directorios, coincide con el carácter de control que se usa en las cadenas de C y los lenguajes que derivan de él, deberemos escribir dichas barras invertidas repetidas, así:
string nombreFichero = "d:\ejemplos\ejemplo1.txt"; // Ruta absoluta string nombreFichero2 = "..\datos\configuracion.txt"; // Ruta relativa
Como esta sintaxis puede llegar a resultar incómoda, en C# existe una alternativa: podemos indicar una arroba (@) justo antes de abrir las comillas, y entonces no será necesario delimitar los caracteres de control:
string nombreFichero = @"d:\ejemplos\ejemplo1.txt";
Ejercicios propuestos:
- Crear un programa que pida al usuario pares de números enteros y escriba su suma (con el formato "20 + 3 = 23") en pantalla y en un fichero llamado "sumas.txt", que se encontrará en un subdirectorio llamado "resultados". Cada vez que se ejecute el programa, deberá añadir los nuevos resultados a continuación de los resultados de las ejecuciones anteriores.
7.6. Saber si un fichero existe
Hasta ahora, estamos intentando abrir ficheros para lectura, pero sin comprobar realmente si el fichero existe o no, lo que puede suponer que nuestro programa falle en caso de que el fichero no se encuentre donde nosotros esperamos.
Una primera solución es usar "File.Exists(nombre)", para comprobar si está, antes de intentar abrirlo:
/*---------------------------*/ /* Ejemplo en C# nº 74: */ /* ejemplo74.cs */ /* */ /* Lectura de un fichero de */ /* texto */ /* */ /* Introduccion a C#, */ /* Nacho Cabanes */ /*---------------------------*/ using System; using System.IO; public class Ejemplo74 { public static void Main() { StreamReader fichero; string nombre; while (true) { Console.Write( "Dime el nombre del fichero (\"fin\" para terminar): "); nombre = Console.ReadLine(); if (nombre == "fin") break; if ( File.Exists(nombre) ) { fichero = File.OpenText( nombre ); Console.WriteLine("Su primera linea es: {0}", fichero.ReadLine() ); fichero.Close(); } else Console.WriteLine( "No existe!" ); } } }
Ejercicios propuestos:
- Mejorar el segundo ejercicio del apartado 7.3 (el que muestra un fichero, haciendo una pausa cada 25 líneas) para que compruebe antes si el fichero existe, y muestre un mensaje de aviso en caso de que no sea así.