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:
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:
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:
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
- 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
- Introducción a la Programación
- Configuración del Entorno de Desarrollo
- Programa Hola Mundo
- Sintaxis y Estructura Básica
Módulo 2: Tipos de Datos y Variables
Módulo 3: Flujo de Control
Módulo 4: Funciones
- Introducción a las Funciones
- Argumentos de Función y Valores de Retorno
- Ámbito y Vida de las Variables
- Funciones Recursivas
Módulo 5: Arreglos y Cadenas
- Introducción a los Arreglos
- Arreglos Multidimensionales
- Manejo de Cadenas
- Funciones de 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
- Introducción al Manejo de Archivos
- Lectura y Escritura de Archivos
- Posicionamiento de Archivos
- Manejo de Errores en Operaciones de Archivos
Módulo 10: Temas Avanzados
- Directivas del Preprocesador
- Argumentos de Línea de Comandos
- Listas de Argumentos Variables
- Multihilo en C
Módulo 11: Mejores Prácticas y Optimización
- Legibilidad del Código y Documentación
- Técnicas de Depuración
- Optimización del Rendimiento
- Consideraciones de Seguridad
