Manejo de ficheros

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:

  1. Abrir / Crear el fichero
  2. Leer / Escribir datos
  3. 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;
}