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; }