En este tema, aprenderemos cómo manejar archivos en C, específicamente cómo leer y escribir datos en archivos. Trabajar con archivos es una habilidad esencial para cualquier programador, ya que permite almacenar y recuperar datos de manera persistente.

Conceptos Clave

  1. Archivos: Un archivo es una colección de datos almacenados en un dispositivo de almacenamiento, como un disco duro.
  2. Flujo de Archivos: En C, los archivos se manejan mediante flujos (streams), que son abstracciones que permiten leer y escribir datos de manera secuencial.
  3. Funciones de Manejo de Archivos: C proporciona varias funciones para abrir, cerrar, leer y escribir archivos.

Abrir y Cerrar Archivos

Para trabajar con archivos en C, primero debemos abrir el archivo utilizando la función fopen(). Una vez que terminamos de trabajar con el archivo, debemos cerrarlo con fclose().

Sintaxis de fopen()

FILE *fopen(const char *filename, const char *mode);
  • filename: Nombre del archivo que queremos abrir.
  • mode: Modo en el que queremos abrir el archivo (lectura, escritura, etc.).

Modos Comunes de Apertura

Modo Descripción
"r" Abre un archivo para lectura. El archivo debe existir.
"w" Abre un archivo para escritura. Si el archivo no existe, se crea. Si existe, se trunca a cero.
"a" Abre un archivo para añadir datos. Si el archivo no existe, se crea.
"r+" Abre un archivo para lectura y escritura. El archivo debe existir.
"w+" Abre un archivo para lectura y escritura. Si el archivo no existe, se crea. Si existe, se trunca a cero.
"a+" Abre un archivo para lectura y añadir datos. Si el archivo no existe, se crea.

Ejemplo de Apertura y Cierre de Archivos

#include <stdio.h>

int main() {
    FILE *file;

    // Abrir archivo para escritura
    file = fopen("example.txt", "w");
    if (file == NULL) {
        printf("Error al abrir el archivo.\n");
        return 1;
    }

    // Escribir datos en el archivo
    fprintf(file, "Hola, Mundo!\n");

    // Cerrar el archivo
    fclose(file);

    return 0;
}

Escribir en Archivos

Para escribir datos en un archivo, podemos usar varias funciones, como fprintf(), fputs(), y fputc().

fprintf()

Es similar a printf(), pero escribe en un archivo en lugar de la consola.

int fprintf(FILE *stream, const char *format, ...);

fputs()

Escribe una cadena de caracteres en un archivo.

int fputs(const char *str, FILE *stream);

fputc()

Escribe un solo carácter en un archivo.

int fputc(int char, FILE *stream);

Ejemplo de Escritura

#include <stdio.h>

int main() {
    FILE *file;

    // Abrir archivo para escritura
    file = fopen("example.txt", "w");
    if (file == NULL) {
        printf("Error al abrir el archivo.\n");
        return 1;
    }

    // Escribir una cadena de caracteres
    fputs("Esta es una línea de texto.\n", file);

    // Escribir un solo carácter
    fputc('A', file);

    // Escribir una cadena formateada
    fprintf(file, "\nNúmero: %d\n", 123);

    // Cerrar el archivo
    fclose(file);

    return 0;
}

Leer de Archivos

Para leer datos de un archivo, podemos usar funciones como fscanf(), fgets(), y fgetc().

fscanf()

Es similar a scanf(), pero lee desde un archivo en lugar de la consola.

int fscanf(FILE *stream, const char *format, ...);

fgets()

Lee una línea de texto de un archivo.

char *fgets(char *str, int n, FILE *stream);

fgetc()

Lee un solo carácter de un archivo.

int fgetc(FILE *stream);

Ejemplo de Lectura

#include <stdio.h>

int main() {
    FILE *file;
    char buffer[100];
    int number;

    // Abrir archivo para lectura
    file = fopen("example.txt", "r");
    if (file == NULL) {
        printf("Error al abrir el archivo.\n");
        return 1;
    }

    // Leer una línea de texto
    if (fgets(buffer, 100, file) != NULL) {
        printf("Leído: %s", buffer);
    }

    // Leer un solo carácter
    char ch = fgetc(file);
    printf("Carácter leído: %c\n", ch);

    // Leer una cadena formateada
    fscanf(file, "\nNúmero: %d\n", &number);
    printf("Número leído: %d\n", number);

    // Cerrar el archivo
    fclose(file);

    return 0;
}

Ejercicio Práctico

Ejercicio

  1. Crea un programa en C que abra un archivo llamado data.txt en modo escritura.
  2. Escribe las siguientes líneas en el archivo:
    Línea 1: Hola, Mundo!
    Línea 2: Programación en C.
    
  3. Cierra el archivo.
  4. Abre el archivo data.txt en modo lectura.
  5. Lee y muestra en la consola cada línea del archivo.

Solución

#include <stdio.h>

int main() {
    FILE *file;

    // Abrir archivo para escritura
    file = fopen("data.txt", "w");
    if (file == NULL) {
        printf("Error al abrir el archivo.\n");
        return 1;
    }

    // Escribir líneas en el archivo
    fputs("Línea 1: Hola, Mundo!\n", file);
    fputs("Línea 2: Programación en C.\n", file);

    // Cerrar el archivo
    fclose(file);

    // Abrir archivo para lectura
    file = fopen("data.txt", "r");
    if (file == NULL) {
        printf("Error al abrir el archivo.\n");
        return 1;
    }

    // Leer y mostrar cada línea del archivo
    char buffer[100];
    while (fgets(buffer, 100, file) != NULL) {
        printf("%s", buffer);
    }

    // Cerrar el archivo
    fclose(file);

    return 0;
}

Conclusión

En esta sección, hemos aprendido cómo abrir, cerrar, leer y escribir archivos en C. Estas habilidades son fundamentales para manejar datos de manera persistente en aplicaciones del mundo real. En el próximo tema, exploraremos cómo posicionar archivos y manejar errores en operaciones de archivos.

Curso de Programación en C

Módulo 1: Introducción a C

Módulo 2: Tipos de Datos y Variables

Módulo 3: Flujo de Control

Módulo 4: Funciones

Módulo 5: Arreglos y Cadenas

Módulo 6: Punteros

Módulo 7: Estructuras y Uniones

Módulo 8: Asignación Dinámica de Memoria

Módulo 9: Manejo de Archivos

Módulo 10: Temas Avanzados

Módulo 11: Mejores Prácticas y Optimización

Módulo 12: Proyecto y Evaluación Final

© Copyright 2024. Todos los derechos reservados