Documentos de Académico
Documentos de Profesional
Documentos de Cultura
archivo (fseek)
En el concepto anterior vimos que cuando abrimos un archivo binario para su lectura el puntero de archivo
se posiciona en el byte 0 y a medida que llamamos a la función fread el puntero de archivo se desplaza.
Veremos ahora una función que nos permite desplazar el puntero de archivo a cualquier posición previo a
la lectura.
Con el desplazamiento del puntero de archivo no estamos obligados a leer en forma secuencial los datos.
La función que nos permite desplazar el puntero de archivo se llama fseek y tiene tres parámetros:
fseek([nombre lógico del archivo], [cantidad de bytes a desplazarse], [ubicación desde donde comenzar a
desplazarse])
El tercer parámetro puede tomar alguno de estos tres valores (son tres macros definidas en el archivo
stdio.h):
SEEK_SET Reposicionar comenzando desde el principio del archivo (es lo mismo poner un 0)
SEEK_CUR Reposicionar comenzando desde la posición actual del puntero de archivo (es lo mismo poner
un 1)
SEEK_END Reposicionar comenzando desde el final del archivo (es lo mismo poner un 2)
Problema 1:
Abrir el archivo binario que se creó en conceptos anteriores: "archivo1.dat" y leer solo
los bytes donde se almacena el valor float. Recordemos que el archivo almacena un
caracter, un entero y un float en ese orden.
ArchivosBinarios3fseek.c
#include<stdio.h> //aqui estan las funciones fseek
#include<conio.h>
#include<stdlib.h>
int main()
{
FILE *arch; //definimos puntero de tipo file
if (arch==NULL)
exit(1);
getch();
return 0;
}
FILE *arch;
arch=fopen("archivo1.dat","rb");
Desplazamos 5 bytes el puntero de archivo desde el comienzo (debemos saltear el char y el int)
fseek(arch,5,SEEK_SET);
Luego de desplazar podemos leer los siguientes cuatro bytes que contienen el valor de tipo float:
Problema 2:
ArchivosBinarios4fseek.c
#include<stdio.h> //aqui estan las funciones fseek
#include<conio.h>
#include<stdlib.h>
int main()
{
FILE *arch; //definimos puntero de tipo file
if (arch==NULL)
exit(1);
float v2;
fread(&v2, sizeof(float), 1, arch); //para leer datos fread
printf("float: %0.2f\n",v2); ////para imprimir los datos 5.25
fclose(arch);
getch();
return 0;
}
Abrimos el archivo, luego de eso ya tenemos el puntero de archivo al comienzo y procedemos a leer el
primer byte donde se aloja el caracter:
FILE *arch;
arch=fopen("archivo1.dat","rb");
if (arch==NULL)
exit(1);
char c;
fread(&c, sizeof(char), 1, arch);
printf("caracter: %c\n",c); //A
El puntero avanza un byte luego de leer, entonces como queremos leer el float que se encuentra después
del int procedemos a avanzar desde la posición actual (SEEK_CUR) cuatro bytes:
fseek(arch,4,SEEK_CUR);
float v2;
fread(&v2, sizeof(float), 1, arch);
printf("float: %0.2f\n",v2); /5.25
Problemas propuestos
Crear un archivo llamado "archivo2.dat". Solicitar la carga de dos enteros y dos float
por teclado. Almacenar en el archivo primero los dos enteros y seguidamente los dos
float. .
Abrir el archivo "arhivo2.dat" creado en el programa anterior y proceder a su lectura e
impresión.
Abrir el archivo "arhivo2.dat" e imprimir solo los dos valores de tipo float
almacenados.
ArchivosBinarios5fseek.c
#include<stdio.h> //aqui estan las funciones open, write y close
#include<conio.h>
#include<stdlib.h>
int main()
{
int v1,v2;
float f1,f2;
if (arch==NULL)
exit(1);
getch();
return 0;
}
ArchivosBinarios6fseek.c
#include<stdio.h> //aqui estan las funciones fread
#include<conio.h>
#include<stdlib.h>
int main()
{
FILE *arch; //definimos puntero de tipo file
if (arch==NULL)
exit(1);
int entero1,entero2;
float real1,real2;
getch();
return 0;
}
ArchivosBinarios7fseek.c
#include<stdio.h> //aqui estan las funciones fseek
#include<conio.h>
#include<stdlib.h>
int main()
{
FILE *arch; //definimos puntero de tipo file
if (arch==NULL)
exit(1);
getch();
return 0;
}