sábado, 23 de abril de 2022

78 - Archivos binarios: grabar y leer vectores completos en un archivo

Grabar y leer vectores completos en un archivo.



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.


Problema 1:

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.

Archivo: programa229.c

Ver video

#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);

No hay comentarios:

Publicar un comentario