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):
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.
#include<stdio.h> #include<conio.h> #include<stdlib.h> int main() { FILE *arch; arch=fopen("archivo1.dat","rb"); if (arch==NULL) exit(1); float v2; fseek(arch,5,SEEK_SET); fread(&v2, sizeof(float), 1, arch); printf("float: %0.2f\n",v2); fclose(arch); getch(); return 0; }
Abrimos el archivo para lectura:
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:
fread(&v2, sizeof(float), 1, arch); printf("float: %0.2f\n",v2);
Abrir el archivo binario : "archivo1.dat" y leer e imprimir el char y el float.
#include<stdio.h> #include<conio.h> #include<stdlib.h> int main() { 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 fseek(arch,4,SEEK_CUR); float v2; fread(&v2, sizeof(float), 1, arch); printf("float: %0.2f\n",v2); /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
programa220.c #include<stdio.h> #include<conio.h> #include<stdlib.h> int main() { int v1,v2; float f1,f2; printf("Ingrese el primer entero:"); scanf("%i",&v1); printf("Ingrese el segundo entero:"); scanf("%i",&v2); printf("Ingrese el primer float:"); scanf("%f",&f1); printf("Ingrese el segundo float:"); scanf("%f",&f2); FILE *arch; arch=fopen("archivo2.dat","wb"); if (arch==NULL) exit(1); fwrite(&v1, sizeof(int), 1, arch); fwrite(&v2, sizeof(int), 1, arch); fwrite(&f1, sizeof(float), 1, arch); fwrite(&f2, sizeof(float), 1, arch); fclose(arch); printf("Se creo un archivo binario y se almacenaron los cuatro datos."); getch(); return 0; } programa221.c #include<stdio.h> #include<conio.h> #include<stdlib.h> int main() { FILE *arch; arch=fopen("archivo2.dat","rb"); if (arch==NULL) exit(1); int entero1,entero2; fread(&entero1, sizeof(int), 1, arch); printf("Primer entero:%i\n",entero1); fread(&entero2, sizeof(int), 1, arch); printf("Segundo entero:%i\n",entero2); float real1,real2; fread(&real1, sizeof(float), 1, arch); printf("Primer float:%0.2f\n",real1); fread(&real2, sizeof(float), 1, arch); printf("Segundo float:%0.2f\n",real2); fclose(arch); getch(); return 0; } programa222.c #include<stdio.h> #include<conio.h> #include<stdlib.h> int main() { FILE *arch; arch=fopen("archivo2.dat","rb"); if (arch==NULL) exit(1); float real1,real2; fseek(arch, 8, SEEK_SET); fread(&real1, sizeof(float), 1, arch); printf("Primer float:%0.2f\n",real1); fread(&real2, sizeof(float), 1, arch); printf("Segundo float:%0.2f\n",real2); fclose(arch); getch(); return 0; }