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)
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.
#include<stdio.h> #include<conio.h> #include<stdlib.h> 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); } 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); } 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); } int main() { crear(); agregar(); imprimir(); 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); }