Está en la página 1de 10

74 - Archivos binarios: agregar datos

Hemos visto que cuando necesitamos crear un archivo lo hacemos pasando a la función fopen el valor "wb".

Con esto indicamos que se cree el archivo y si ya existe lo borre y lo cree nuevamente vacío.

En muchas situaciones podemos necesitar agregar datos al archivo sin tenerlo que borrar, para esto
debemos pasar a la función fopen el valor "ab" (append binary)

Problema 1:

Confeccionar un programa con tres funciones:


1 - Creación de un archivo binario llamado "archivo3.dat" y almacenar 3 enteros.
Seguidamente cerrar el archivo
2 - Abrir nuevamente el archivo pero en modo de añadir y almacenar 1 float.
3 - Finalmente abrir el archivo para lectura y mostrar todos sus datos.
ArchivosBinariosAgregarDatos.c
#include<stdio.h> //aqui estan las funciones open, write y close
#include<conio.h>
#include<stdlib.h>

void presentacion()
{
printf(" Archivos binarios: agregar datos.\n");
printf(" Creacion de un archivo binario llamado archivo3.dat y almacenar 3 enteros.\n");
printf(" Seguidamente cerrar el archivo.\n");
printf(" Abrir nuevamente el archivo pero en modo de anadir y almacenar 1 float. \n");
printf(" Creacion de un archivo binario llamado archivo3.dat y almacenar 3 enteros. \n");
printf(" Finalmente abrir el archivo para lectura y mostrar todos sus datos. \n");
printf(" Muestra 3 Funciones mas Presentacion, Separacion y Finalizacion\n");
printf("*******************************\n");
printf("\n");
}

void crear()
{
FILE *arch; //definimos puntero de tipo file

arch=fopen("archivo3.dat","wb"); //definimos puntero de tipo file

if (arch==NULL)
exit(1);

int valor1=10;
fwrite(&valor1, sizeof(int), 1, arch); //para grabar datos fwrite

int valor2=20;
fwrite(&valor2, sizeof(int), 1, arch); //para grabar datos fwrite

int valor3=30;
fwrite(&valor3, sizeof(int), 1, arch); //para grabar datos fwrite

fclose(arch); //liberamos el archivo con fclose


}

void agregar()
{
FILE *arch; //definimos puntero de tipo file

arch=fopen("archivo3.dat","ab"); //para agregar datos sin borrar los otros ab

if (arch==NULL)
exit(1);

float f1=5.45; //agregamos float 5.45


fwrite(&f1, sizeof(float), 1, arch); //y lo garbamos con datos fwrite

fclose(arch); //liberamos el archivo con fclose


}

void imprimir()
{
FILE *arch; //definimos puntero de tipo file

arch=fopen("archivo3.dat","rb"); //creamos y abrimos archivo con fopen con rb

if (arch==NULL)
exit(1);

int v1, v2, v3;

fread(&v1, sizeof(int), 1, arch); //para leer datos fread


printf(" Primer entero: %i\n",v1); //imprimimos

fread(&v2, sizeof(int), 1, arch); //para leer datos fread


printf(" Segundo entero: %i\n",v2); //imprimimos

fread(&v3, sizeof(int), 1, arch); //para leer datos fread


printf(" Tercer entero: %i\n",v3); //imprimimos

float f1;

fread(&f1, sizeof(float), 1, arch); //para leer datos fread


printf("\n-------------------------------------------------------------------------\n");
printf(" Agregamos float sin borrar los anteriores: %0.2f\n",f1); //imprimimos
printf("-------------------------------------------------------------------------\n");

fclose(arch); //liberamos el archivo con fclose


}

void separacion()
{
printf("\n*******************************\n");
}

void finalizacion()
{
printf("\n*******************************\n");
printf(" Gracias por utilizar este programa");
}

int main()
{

presentacion();
separacion();

crear();
agregar();
imprimir();

separacion();
finalizacion();

getch();
return 0;
}

La primer función que se llama desde la main es crear:

void crear()
{
FILE *arch;
arch=fopen("archivo3.dat","wb");
if (arch==NULL)
exit(1);
int valor1=10;
fwrite(&valor1, sizeof(int), 1, arch);
int valor2=20;
fwrite(&valor2, sizeof(int), 1, arch);
int valor3=30;
fwrite(&valor3, sizeof(int), 1, arch);
fclose(arch);
}

En esta función se crea un archivo binario llamado "archivo3.dat" si ya existe se vuelve a crear porque
pasamos "wb" (write binary)

Se graban tres valores enteros.

La segunda función llamada "agregar" es donde aparece lo nuevo donde procedemos a la apertura del archivo
para añadir datos "ab" (append binary):

void agregar()
{
FILE *arch;
arch=fopen("archivo3.dat","ab");
if (arch==NULL)
exit(1);
float f1=5.45;
fwrite(&f1, sizeof(float), 1, arch);
fclose(arch);
}

Cuando se abre para añadir el puntero de archivo apunta al final donde procedemos a grabar en este caso
un valor float. Es decir ahora nuestro archivo almacena 4 datos: 3 enteros y un float.

El algoritmo de impresión es similar a lo visto en conceptos anteriores:

void imprimir()
{
FILE *arch;
arch=fopen("archivo3.dat","rb");
if (arch==NULL)
exit(1);
int v1, v2, v3;
fread(&v1, sizeof(int), 1, arch);
printf("entero: %i\n",v1);
fread(&v2, sizeof(int), 1, arch);
printf("entero: %i\n",v2);
fread(&v3, sizeof(int), 1, arch);
printf("entero: %i\n",v3);
float f1;
fread(&f1, sizeof(float), 1, arch);
printf("float: %0.2f\n",f1);
fclose(arch);
}

Confeccionar un programa con tres funciones:


1 - Creación de un archivo binario llamado "archivo3.dat" y almacenar 5 enteros.
Seguidamente cerrar el archivo
2 - Abrir nuevamente el archivo pero en modo de añadir y almacenar 3 float.
3 - Finalmente abrir el archivo para lectura y mostrar todos sus datos.

ArchivosBinariosAgregarDatos2.c
#include<stdio.h> //aqui estan las funciones open, write y close
#include<conio.h>
#include<stdlib.h>

void presentacion()
{
printf(" Archivos binarios: agregar datos.\n");
printf(" Creacion de un archivo binario llamado archivo4.dat y almacenar 5 enteros.\n");
printf(" Seguidamente cerrar el archivo.\n");
printf(" Abrir nuevamente el archivo pero en modo de añadir y almacenar 3 float. \n");
printf(" Creacion de un archivo binario llamado archivo3.dat y almacenar 5 enteros. \n");
printf(" Finalmente abrir el archivo para lectura y mostrar todos sus datos. \n");
printf(" Muestra 3 Funciones mas Presentacion, Separacion y Finalizacion\n");
printf("*******************************\n");
printf("\n");
}

void crear()
{
FILE *arch; //definimos puntero de tipo file

arch=fopen("archivo4.dat","wb"); //definimos puntero de tipo file

if (arch==NULL)
exit(1);

int valor1=155;
fwrite(&valor1, sizeof(int), 1, arch); //para grabar datos fwrite

int valor2=255;
fwrite(&valor2, sizeof(int), 1, arch); //para grabar datos fwrite

int valor3=355;
fwrite(&valor3, sizeof(int), 1, arch); //para grabar datos fwrite

int valor4=455;
fwrite(&valor4, sizeof(int), 1, arch); //para grabar datos fwrite

int valor5=555;
fwrite(&valor5, sizeof(int), 1, arch); //para grabar datos fwrite

fclose(arch); //liberamos el archivo con fclose


}

void agregar()
{
FILE *arch; //definimos puntero de tipo file

arch=fopen("archivo4.dat","ab"); //para agregar datos sin borrar los otros ab

if (arch==NULL)
exit(1);

float f1=50.50; //agregamos float 50.50


fwrite(&f1, sizeof(float), 1, arch); //y lo grabamos con datos fwrite

float f2=60.50; //agregamos float 60.50


fwrite(&f2, sizeof(float), 2, arch); //y lo grabamos con datos fwrite

float f3=70.50; //agregamos float 70.50


fwrite(&f3, sizeof(float), 3, arch); //y lo grabamos con datos fwrite

fclose(arch); //liberamos el archivo con fclose


}

void imprimir()
{
FILE *arch; //definimos puntero de tipo file

arch=fopen("archivo4.dat","rb"); //creamos y abrimos archivo con fopen con rb

if (arch==NULL)
exit(1);
int v1, v2, v3, v4, v5;

fread(&v1, sizeof(int), 1, arch); //para leer datos fread


printf(" Primer entero: %3i\n",v1); //imprimimos

fread(&v2, sizeof(int), 1, arch); //para leer datos fread


printf(" Segundo Entero entero: %3i\n",v2); //imprimimos

fread(&v3, sizeof(int), 1, arch); //para leer datos fread


printf(" Tercer entero: %3i\n",v3); //imprimimos

fread(&v4, sizeof(int), 1, arch); //para leer datos fread


printf(" Cuarto entero: %3i\n",v4); //imprimimos

fread(&v5, sizeof(int), 1, arch); //para leer datos fread


printf(" Quinto Entero entero: %3i\n",v5); //imprimimos

float f1;

fread(&f1, sizeof(float), 1, arch); //para leer datos fread


printf("\n-------------------------------------------------------------------------\n");
printf(" Agregamos el primer float sin borrar los anteriores: %0.2f\n",f1); //imprimimos

float f2;

fread(&f2, sizeof(float), 1, arch); //para leer datos fread


printf(" Agregamos el segundo float sin borrar los anteriores: %0.2f\n",f2); //imprimimos
//imprimimos

float f3;

fread(&f3, sizeof(float), 1, arch); //para leer datos fread


printf(" Agregamos el tercer float sin borrar los anteriores: %0.2f\n",f3); //imprimimos
printf("-------------------------------------------------------------------------\n");

fclose(arch); //liberamos el archivo con fclose


}

void separacion()
{
printf("\n*******************************\n");
}

void finalizacion()
{
printf("\n*******************************\n");
printf(" Gracias por utilizar este programa");
}

int main()
{

presentacion();
separacion();

crear();
agregar();
imprimir();

separacion();
finalizacion();

getch();
return 0;
}

Confeccionar un programa con tres funciones:


1 - Creación de un archivo binario llamado "archivo5.dat" y pedir la carga de 5 enteros
y 3 floats. Seguidamente cerrar el archivo
2 - Abrir nuevamente el archivo pero en modo de añadir y almacenar 2 floats mas sin
borrrar los otros.
3 – Utilizar FSEEK con SEEK_SET y on SEEK_CUR y imprimor los valores.
4 - Finalmente abrir el archivo para lectura y mostrar todos sus datos.

ArchivosBinariosAgregarDatos3.c
#include<stdio.h> //aqui estan las funciones open, write y close
#include<conio.h>
#include<stdlib.h>

void presentacion()
{
printf(" Archivos binarios: agregar datos.\n");
printf(" Creacion de un archivo binario llamado archivo5.dat.\n");
printf(" Pedimos ingresar 5 enteros y 3 floats.\n");
printf(" Seguidamente cerrar el archivo.\n");
printf(" Abrir nuevamente el archivo pero en modo de añadir y almacenar 2 float. \n");
printf(" Creacion de un archivo binario llamado archivo5.dat y almacenar todo. \n");
printf(" Utilizar el fseek y el SEEK_SET saltaremos 16 bytes e imprimiremos el entero. \n");
printf(" Utilizar el fseek y el SEEK_CUR saltaremos 8 bytes e imprimiremos el float. \n");
printf(" Utilizar el fseek y el SEEK_CUR saltaremos 4 bytes e imprimiremos el float. \n");
printf(" Finalmente abrir el archivo para lectura y mostrar todos sus datos. \n");
printf(" Muestra 3 Funciones mas Presentacion, Separacion y Finalizacion\n");
printf("*******************************\n");
printf("\n");
}

void cargar ()
{
int v1,v2,v3,v4,v5;
float f1,f2,f3;

printf("\n-------------------------------------------------------------------------\n");
printf(" Ingrese el primer entero: ");
scanf("%i",&v1);
printf("-------------------------------------------------------------------------\n");

printf(" Ingrese el segundp entero: ");


scanf("%i",&v2);
printf("-------------------------------------------------------------------------\n");

printf(" Ingrese el tercer entero: ");


scanf("%i",&v3);
printf("-------------------------------------------------------------------------\n");

printf(" Ingrese el cuarto entero: ");


scanf("%i",&v4);
printf("-------------------------------------------------------------------------\n");

printf(" Ingrese el quinto entero: ");


scanf("%i",&v5);
printf("-------------------------------------------------------------------------\n");
printf("*******************************\n");

printf(" Ingrese el primer float: ");


scanf("%f",&f1);
printf("-------------------------------------------------------------------------\n");

printf(" Ingrese el segundo float: ");


scanf("%f",&f2);
printf("-------------------------------------------------------------------------\n");

printf(" Ingrese el tercer float: ");


scanf("%f",&f3);
printf("-------------------------------------------------------------------------\n");

FILE *arch; //definimos puntero de tipo file


arch=fopen("archivo5.dat","wb"); //abrimos archivo con fopen con wb

if (arch==NULL)
exit(1);

fwrite(&v1, sizeof(int), 1, arch); //para grabar datos fwrite


fwrite(&v2, sizeof(int), 1, arch);
fwrite(&v3, sizeof(int), 1, arch);
fwrite(&v4, sizeof(int), 1, arch);
fwrite(&v5, sizeof(int), 1, arch);

fwrite(&f1, sizeof(float), 1, arch);


fwrite(&f2, sizeof(float), 1, arch);
fwrite(&f3, sizeof(float), 1, arch);

fclose(arch); //liberamos el archivo con fclose

void crear()
{
FILE *arch; //definimos puntero de tipo file

arch=fopen("archivo5.dat","wb"); //definimos puntero de tipo file

if (arch==NULL)
exit(1);

int v1,v2,v3,v4,v5;
float f1,f2,f3;

fwrite(&v1, sizeof(int), 1, arch); //para grabar datos fwrite


fwrite(&v2, sizeof(int), 1, arch); //para grabar datos fwrite
fwrite(&v3, sizeof(int), 1, arch); //para grabar datos fwrite
fwrite(&v4, sizeof(int), 1, arch); //para grabar datos fwrite
fwrite(&v5, sizeof(int), 1, arch); //para grabar datos fwrite

fwrite(&f1, sizeof(float), 1, arch); //y lo grabamos con datos fwrite


fwrite(&f2, sizeof(float), 1, arch); //y lo grabamos con datos fwrite
fwrite(&f3, sizeof(float), 1, arch); //y lo grabamos con datos fwrite

fclose(arch); //liberamos el archivo con fclose


}

void agregar()
{
float fa1,fa2,fa3;

printf("*******************************\n");
printf(" Ingrese el primer float para agregar: ");
scanf("%f",&fa1);
printf("-------------------------------------------------------------------------\n");

printf(" Ingrese el segundo float para agregar: ");


scanf("%f",&fa2);
printf("-------------------------------------------------------------------------\n");

FILE *arch;

fwrite(&fa1, sizeof(float), 1, arch);


fwrite(&fa2, sizeof(float), 1, arch);
fwrite(&fa3, sizeof(float), 1, arch);

arch=fopen("archivo5.dat","ab"); //para agregar datos sin borrar los otros ab

if (arch==NULL)
exit(1);
fwrite(&fa1, sizeof(float), 1, arch); //y lo grabamos con datos fwrite
fwrite(&fa2, sizeof(float), 2, arch); //y lo grabamos con datos fwrite

fclose(arch); //liberamos el archivo con fclose


}

void imprimir()
{
FILE *arch; //definimos puntero de tipo file

arch=fopen("archivo5.dat","rb"); //creamos y abrimos archivo con fopen con rb

if (arch==NULL)
exit(1);

int v1, v2, v3, v4, v5;

fread(&v1, sizeof(int), 1, arch); //para leer datos fread


printf("\n-------------------------------------------------------------------------\n");
printf(" Primer entero: %i\n",v1); //imprimimos

fread(&v2, sizeof(int), 1, arch); //para leer datos fread


printf(" Segundo entero: %i\n",v2); //imprimimos

fread(&v3, sizeof(int), 1, arch); //para leer datos fread


printf(" Tercer entero: %i\n",v3); //imprimimos

fread(&v4, sizeof(int), 1, arch); //para leer datos fread


printf(" Cuarto entero: %i\n",v4); //imprimimos

fread(&v5, sizeof(int), 1, arch); //para leer datos fread


printf(" Quinto entero: %i\n",v5); //imprimimos
printf("\n");

float f1;

fread(&f1, sizeof(float), 1, arch); //para leer datos fread


printf("*******************************\n");
printf(" Agregamos el primer float: %0.2f\n",f1); //imprimimos

float f2;

fread(&f2, sizeof(float), 1, arch); //para leer datos fread


printf(" Agregamos el segundo float: %0.2f\n",f2); //imprimimos

float f3;

fread(&f3, sizeof(float), 1, arch); //para leer datos fread


printf(" Agregamos el tercer float: %0.2f\n",f3); //imprimimos //imprimimos
printf("-------------------------------------------------------------------------\n");

float fa1;

fread(&fa1, sizeof(float), 1, arch); //para leer datos fread


printf("*******************************\n");
printf("\n-------------------------------------------------------------------------\n");
printf(" Agregamos otro float sin borrar los anteriores: %0.2f\n",fa1); //imprimimos

float fa2;

fread(&fa2, sizeof(float), 1, arch); //para leer datos fread


printf(" Agregamos otro float sin borrar los anteriores: %0.2f\n",fa2); //imprimimos
printf("-------------------------------------------------------------------------\n");

fclose(arch); //liberamos el archivo con fclose


}

void imprimirUno()
{
FILE *arch; //definimos puntero de tipo file

arch=fopen("archivo5.dat","rb"); //creamos y abrimos archivo con fopen con rb

if (arch==NULL)
exit(1);

int v1,v2,v3,v4,v5;
float f1,f2,f3,fa1,fa2;

fseek(arch, 16, SEEK_SET); //SEEk_SET comenzaremos contando desde el principio


//saltamos los 4 enteros que van primero 4+4+4+4=16bytes

fread(&v1, sizeof(int), 1, arch); //para leer datos fread

printf(" El puntero esta en el 0 con el SEEK_SET apuntamos desde el principio 16 bytes\n");


printf(" Al hacer saltar 16 bytes mostrara el Quinto entero que es: %i\n",v1);
//para imprimir los datos
printf("*******************************\n");

fseek(arch, 8, SEEK_CUR); //SEEk_CUR comenzaremos contando desde donde esta v5


//saltamos los 2 floats que van primero 4+4=8bytes

fread(&f1, sizeof(float), 1, arch); //para leer datos fread

printf(" El puntero esta en el v5 con el SEEK_CUR apuntamos desde donde esta 8 bytes\n");
printf(" Al hacer saltar 8 bytes mostrara el tercer float que es: %0.2f\n",f1);
//para imprimir los datos
printf("*******************************\n");

fseek(arch, 4, SEEK_CUR); //SEEk_CUR comenzaremos contando desde donde esta tercer float
//saltamos los 1 floats que van primero 4bytes

fread(&f3, sizeof(float), 1, arch); //para leer datos fread

printf(" El puntero esta en el tercer float con el SEEK_CUR apuntamos desde donde esta 4
bytes\n");
printf(" Al hacer saltar 4 bytes mostrara el segundo float agregado que es: %0.2f\n",f3);
//para imprimir los datos
printf("*******************************\n");

fclose(arch); //liberamos el archivo con fclose


}

void separacion()
{
printf("\n*******************************\n");
}

void finalizacion()
{
printf("\n*******************************\n");
printf(" Gracias por utilizar este programa");
}

int main()
{

presentacion();
separacion();

cargar();
crear();
imprimir();

agregar();
imprimirUno();
separacion();
finalizacion();

getch();
return 0;
}

También podría gustarte