El posicionamiento de archivos en C es una técnica que permite mover el puntero de archivo a diferentes posiciones dentro de un archivo abierto. Esto es útil para leer o escribir datos en ubicaciones específicas del archivo. En este tema, aprenderemos sobre las funciones estándar de C que se utilizan para el posicionamiento de archivos: fseek(), ftell(), y rewind().

Funciones de Posicionamiento de Archivos

fseek()

La función fseek() se utiliza para mover el puntero de archivo a una posición específica. Su prototipo es:

int fseek(FILE *stream, long int offset, int whence);
  • stream: Un puntero al archivo.
  • offset: Número de bytes a mover el puntero.
  • whence: Punto de referencia para el desplazamiento. Puede ser:
    • SEEK_SET: Inicio del archivo.
    • SEEK_CUR: Posición actual del puntero.
    • SEEK_END: Final del archivo.

Ejemplo de fseek()

#include <stdio.h>

int main() {
    FILE *file = fopen("example.txt", "r");
    if (file == NULL) {
        perror("Error al abrir el archivo");
        return 1;
    }

    // Mover el puntero de archivo a 10 bytes desde el inicio
    fseek(file, 10, SEEK_SET);

    // Leer el siguiente carácter
    int ch = fgetc(file);
    if (ch != EOF) {
        printf("Carácter en la posición 10: %c\n", ch);
    } else {
        printf("Error al leer el carácter\n");
    }

    fclose(file);
    return 0;
}

ftell()

La función ftell() devuelve la posición actual del puntero de archivo. Su prototipo es:

long int ftell(FILE *stream);
  • stream: Un puntero al archivo.

Ejemplo de ftell()

#include <stdio.h>

int main() {
    FILE *file = fopen("example.txt", "r");
    if (file == NULL) {
        perror("Error al abrir el archivo");
        return 1;
    }

    // Leer el primer carácter
    int ch = fgetc(file);
    if (ch != EOF) {
        printf("Primer carácter: %c\n", ch);
    }

    // Obtener la posición actual del puntero de archivo
    long int pos = ftell(file);
    printf("Posición actual del puntero de archivo: %ld\n", pos);

    fclose(file);
    return 0;
}

rewind()

La función rewind() mueve el puntero de archivo al inicio del archivo. Su prototipo es:

void rewind(FILE *stream);
  • stream: Un puntero al archivo.

Ejemplo de rewind()

#include <stdio.h>

int main() {
    FILE *file = fopen("example.txt", "r");
    if (file == NULL) {
        perror("Error al abrir el archivo");
        return 1;
    }

    // Leer el primer carácter
    int ch = fgetc(file);
    if (ch != EOF) {
        printf("Primer carácter: %c\n", ch);
    }

    // Mover el puntero de archivo al inicio
    rewind(file);

    // Leer el primer carácter nuevamente
    ch = fgetc(file);
    if (ch != EOF) {
        printf("Primer carácter después de rewind: %c\n", ch);
    }

    fclose(file);
    return 0;
}

Ejercicio Práctico

Ejercicio

  1. Crea un programa en C que abra un archivo de texto, lea y muestre el contenido del archivo, luego mueva el puntero de archivo a la mitad del archivo y lea y muestre el contenido desde esa posición hasta el final del archivo.

Solución

#include <stdio.h>

int main() {
    FILE *file = fopen("example.txt", "r");
    if (file == NULL) {
        perror("Error al abrir el archivo");
        return 1;
    }

    // Obtener la longitud del archivo
    fseek(file, 0, SEEK_END);
    long int file_size = ftell(file);
    rewind(file);

    // Leer y mostrar el contenido completo del archivo
    printf("Contenido completo del archivo:\n");
    int ch;
    while ((ch = fgetc(file)) != EOF) {
        putchar(ch);
    }

    // Mover el puntero de archivo a la mitad del archivo
    fseek(file, file_size / 2, SEEK_SET);

    // Leer y mostrar el contenido desde la mitad hasta el final
    printf("\n\nContenido desde la mitad del archivo:\n");
    while ((ch = fgetc(file)) != EOF) {
        putchar(ch);
    }

    fclose(file);
    return 0;
}

Resumen

En esta sección, hemos aprendido sobre el posicionamiento de archivos en C utilizando las funciones fseek(), ftell(), y rewind(). Estas funciones son esenciales para manipular el puntero de archivo y acceder a diferentes partes de un archivo de manera eficiente. Con la práctica y el uso de estos conceptos, podrás manejar archivos de manera más flexible y precisa en tus programas en C.

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