Hasta hora siempre que hemos utilizado la función fread y fwrite en el tercer parámetro hemos pasado el valor 1:
char letra='A'; fwrite(&letra, sizeof(char), 1, arch); int valor1=12; fwrite(&valor1, sizeof(int), 1, arch); char c; fread(&c, sizeof(char), 1, arch);
Veremos ahora como cuando necesitamos grabar o leer un vector en una sola llamada a la función fread o fwrite indicamos en dicho tercer parámetro el tamaño del vector.
Confeccionar un programa con dos funciones:
1 - Crear un vector con 10 enteros y grabar dicho vector en un archivo binario llamado "archivo7.dat"
2 - Recuperar todos los datos del archivo creado anteriormente y almacenar los datos en un vector.
#include<stdio.h> #include<conio.h> #include<stdlib.h> #define TAM 10 void grabarVector() { FILE *arch; arch=fopen("archivo7.dat","wb"); if (arch==NULL) exit(1); int vec[TAM]={10,20,30,40,50,60,70,80,90,100}; fwrite(vec, sizeof(int), TAM, arch); fclose(arch); } void recuperarVector() { FILE *arch; arch=fopen("archivo7.dat","rb"); if (arch==NULL) exit(1); int vec[TAM]; fread(vec, sizeof(int), TAM, arch); int f; for(f=0;f<TAM;f++) { printf("%i ",vec[f]); } fclose(arch); } int main() { grabarVector(); recuperarVector(); getch(); return 0; }
La función fwrite nos facilita la grabación de un vector en forma completo:
int vec[TAM]={10,20,30,40,50,60,70,80,90,100}; fwrite(vec, sizeof(int), TAM, arch);
Es importante hacer notar que no le disponemos el caracter '&' previo al nombre 'vec' debido a que los vectores son punteros en el lenguaje C y por lo tanto estamos enviando la dirección del vector al enviarle 'vec'.
Ahora en el tercer parámetro indicamos la macro TAM que será remplazada por el valor 10 (esto debido a que el vector tiene 10 enteros)
La función para recuperar los 10 int almacenados en el archivo también lo hacemos con una sola llamada a la función fread:
int vec[TAM]; fread(vec, sizeof(int), TAM, arch);