Conceptos básicos.
- Fichero físico: el fichero que existe realmente sobre algún soporte físico.
- Fichero lógico: identificador dentro de nuestro programa que nos permite acceder a uno o varios archivos físicos. De igual forma un fichero físico puede asociarse con varios ficheros lógicos.
- Registro: bloque de datos que forma un todo. Cada uno de esos datos se le llama campo.
- Acceso secuencial: cuando tenemos que recorrer todo el fichero hasta llegar a cierto punto.
- Acceso aleatorio: podemos acceder a cualquier parte del fichero sin necesidad de recorrer todo.
Ficheros de texto.
Lectura / Escritura de un archivo de texto:
- Abrir / Crear el fichero
- Leer / Escribir datos
- Cerrar el fichero
La librería que hay que utilizar:
- using System.IO
Ejemplo de escritura en archivo de texto (StreamWriter + File.CreateText)
...
StreamWriter fichero; //Clase que representa un fichero
fichero = File.CreateText("prueba.txt"); //Creamos un fichero
fichero.WriteLine("esto es una línea"); // Lo mismo que cuando escribimos por consola
fichero.Write("fin de la cita.");
fichero.Close(); // Al cerrar el fichero nos aseguramos que no queda ningún dato por guardar
...
Ejemplo de lectura de un fichero de texto (StreamReader + File.OpenText).
...
StreamReader fichero;
string linea;
fichero = File.OpenText("prueba.txt");
linea = fichero.ReadLine();
fichero.Close();
...
Lectura hasta el final.
...
do {
linea= fichero.ReadLine();
...
} while linea != null
...
Añadir a un fichero existente File.AppendText
...
StreamWriter fichero;
fichero = File.AppendText("prueba.txt");
fichero.WriteLine("añadimos texto al fichero, sino existe se crea");
fichero.Close();
...
Ficheros en otras rutas.
string nombreFichero = "c:\\temp\\prueba.txt"; string nombreFichero2 = @"c:\temp\prueba2.txt";
Comprobar si existe un archivo. Tratamiento de errores
...
if (File.Exists(nombre)) {
...
}
...
...
try {
fichero = File.OpenText(nombre);
...
}
catch (Exception exp) {
txtError.Text = exp.Message;
return;
}
Podemos afinar más con los errores:
...
try {
fichero = File.OpenText(nombre);
...
}
catch (PathTooLongException exp) {
txtError.Text = "Ruta demasiado larga.\n" + exp.Message;
return;
}
catch (IOException exp) {
txtError.Text = "No se pudo escribir.\n" + exp.Message;
return;
}
catch (Exception exp) {
txtError.Text = exp.Message;
return;
}