78 - Archivos binarios: 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);

Retornar