Manejo de Archivos en C: Conceptos Esenciales de Ficheros y Operaciones I/O

Clasificado en Informática

Escrito el en español con un tamaño de 5,98 KB

Conceptos Fundamentales de Manejo de Archivos en C

1. Apertura y Cierre de Ficheros

Para interactuar con ficheros, es esencial abrirlos y cerrarlos correctamente. La función fopen() se utiliza para abrir un fichero, y es crucial verificar si la operación fue exitosa.

FILE *fp;
if ((fp = fopen("C:\\abrir\\datos.txt", "w")) == NULL) {
    puts("Error al abrir el fichero.");
}

Importancia del Cierre: Si el programa finaliza antes de cerrar el fichero (usando fclose()), el contenido podría perderse. Esto se debe a que la información se almacena temporalmente en una "corriente" (búfer) en la memoria RAM. Si esta corriente no se vacía (flush) al disco duro antes de que el programa termine, los datos no se escriben permanentemente. Este problema no ocurre al leer, ya que los datos fluyen del disco duro a la corriente y luego se visualizan.

2. Errores Comunes al Operar con Ficheros

Diversas situaciones pueden impedir una operación exitosa de lectura o escritura:

  • Disco duro lleno: No hay espacio disponible para escribir.
  • Unidad inexistente: La ruta especificada no corresponde a una unidad válida.
  • Fichero no existente: Al intentar leer un fichero que no existe (o al intentar escribir en una ruta donde no se puede crear).

3. Escritura de Datos en Ficheros

La función fwrite() permite escribir bloques de datos en un fichero. Es fundamental entender sus parámetros:

if (fwrite(&info_dire[i], sizeof(struct dire), 1, fp))
  • &info_dire[i]: Puntero al bloque de datos que se desea escribir. Indica la posición de inicio de los datos en memoria.
  • sizeof(struct dire): Tamaño de cada elemento (paquete) a escribir, en bytes.
  • 1: Número de elementos (paquetes) a escribir.
  • fp: Puntero al fichero donde se escribirá la información.

4. Lectura de Datos desde Ficheros

Para leer bloques de datos desde un fichero, se utiliza la función fread():

if ((numread = fread(buf, 1, size, fp)))
  • buf: Puntero al búfer en memoria donde se almacenarán los datos leídos.
  • 1: Tamaño de cada elemento a leer (en este caso, 1 byte).
  • size: Número de elementos (bytes) a leer.
  • fp: Puntero al fichero desde el que se leerá la información.
  • numread: Variable que almacena el número de elementos leídos exitosamente.

5. Posicionamiento Aleatorio en Ficheros (fseek)

La función fseek() permite mover el puntero de posición dentro de un fichero, facilitando el acceso aleatorio a los datos. Se utiliza en conjunto con los siguientes orígenes de búsqueda:

SEEK_SET:
Búsqueda desde el principio del fichero.
SEEK_CUR:
Búsqueda desde la posición actual del puntero.
SEEK_END:
Búsqueda desde el final del fichero.

Ejemplo de uso:

if (fseek(fp, sector * SIZE, SEEK_SET))

Esta instrucción mueve el puntero del fichero fp a una posición calculada a partir del principio del archivo (SEEK_SET), avanzando sector * SIZE bytes.

6. Conceptos Clave: Fichero y Corriente

Fichero:
Una estructura de datos de acceso secuencial soportada en un elemento de almacenamiento físico (magnético, eléctrico, etc.), como un disco duro o una memoria USB.
Corriente (Búfer):
Un elemento auxiliar generado en la memoria RAM que sirve de intermediario para las operaciones de escritura y lectura entre el programa y el fichero físico. Mejora la eficiencia al reducir el número de accesos directos al disco.

7. Modos de Apertura de Ficheros (fopen)

La función fopen() acepta diferentes modos para especificar el tipo de operación y el formato del fichero:

  • Modos Básicos:
    • "r": Abre un archivo de texto para lectura.
    • "w": Crea un archivo de texto para escritura. Si el archivo ya existe, su contenido se trunca (se borra).
    • "a": Abre un archivo de texto para añadir contenido al final. Si el archivo no existe, se crea.
  • Modos Binarios:

    Al añadir la letra 'b' a los modos básicos (ej., "rb", "wb", "ab"), se especifica que el fichero es binario. Esto es crucial para evitar conversiones de caracteres que pueden corromper datos no textuales.

  • Modos de Lectura/Escritura (Actualización):

    Al añadir el carácter '+' a los modos básicos (ej., "r+", "w+", "a+"), el fichero se abre para lectura y escritura.

    • "r+": Abre un archivo de texto existente para lectura y escritura.
    • "w+": Crea un archivo de texto para lectura y escritura. Si existe, lo trunca.
    • "a+": Abre un archivo de texto para lectura y escritura, añadiendo al final. Si no existe, lo crea.

    Combinando '+' y 'b' (ej., "r+b", "w+b", "a+b"), se obtienen los modos de lectura/escritura para ficheros binarios.

  • Modos de Texto (Explícitos):

    Aunque por defecto los modos sin 'b' son de texto, se puede añadir explícitamente la letra 't' (ej., "rt", "wt", "at") para indicar que es un fichero de texto. Esto es redundante en muchos sistemas, pero puede mejorar la claridad. También se pueden combinar con '+' (ej., "r+t").

Entradas relacionadas: