Ejercicios Básicos Resueltos de Ficheros Binarios en C++

Dadas las siguientes instrucciones:
struct Tdato
{
          int b;
          char s[100];
};
int x, n, a[10]={1,2,3,4,5,6,7,8,9,0};
double f;
char nombre[]="Ejercicios ficheros binarios";
Tdato p;
ifstream f1;
ofstream f2;
f1.open("entrada.dat", ios::binary);
f2.open("salida.dat", ios::binary);

Escribe las instrucciones para realizar cada una de las siguientes operaciones:
a. Escribir el dato entero x en el fichero.
b. Escribir el dato double f en el fichero.
c. Escribir los 5 primeros elementos del array a en el fichero.
d. Escribir los 10 primeros caracteres de la cadena nombre en el fichero.
e. Escribir el dato de tipo Tdato p en el fichero.
f. Leer un dato entero del fichero y almacenarlo en la variable x.
g. Leer un dato double del fichero y almacenarlo en la variable f.
h. Leer 5 enteros y almacenarlos en el array a.
i. Leer 10 caracteres y almacenarlos en la cadena nombre.
j. Leer un dato de tipo Tdato y almacenarlo en la variable p.

Solución:
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
   struct Tdato
   {
          int b;
          char s[100];
   };
   int x, n, a[10]={1,2,3,4,5,6,7,8,9,0};
   double f;
   char nombre[]="Ejercicios ficheros binarios";
   Tdato p;
   ifstream f1;
   ofstream f2;
   f1.open("f1.dat", ios::binary);
   f2.open("f1.dat", ios::binary);
  
   //a. Escribir el dato entero x en el fichero.
   x = 1234;
   f2.write((char *)&x,sizeof(int));
  
   //b. Escribir el dato double f en el fichero.
   f = 98.765;
   f2.write((char *)&f,sizeof(double));
  
   //c. Escribir los 5 primeros elementos del array a en el fichero.
   f2.write((char *)&a[0],5*sizeof(int));
  
   //d. Escribir los 10 primeros caracteres de la cadena nombre en el fichero.
   f2.write(nombre,10);
  
   //e. Escribir el dato de tipo Tdato p en el fichero.
   p.b = 44;
   strcpy(p.s,"cadena");
   f2.write((char *)&p,sizeof(Tdato));
  
   f2.close();
   f1.open("f1.dat", ios::binary);
  
   //f. Leer un dato entero del fichero y almacenarlo en la variable x. 
   f1.read((char *)&x,sizeof(int));
  
   //g. Leer un dato double del fichero y almacenarlo en la variable f.
   f1.read((char *)&f,sizeof(double));
  
   //h. Leer 5 enteros almacenarlos en el array a.
   f1.read((char *)&a[0],5*sizeof(int));
  
   //i. Leer 10 caracteres y almacenarlos en la cadena nombre.
   f1.read(nombre,10);
  
   //j. Leer un dato de tipo Tdato y almacenarlo en la variable p.
   f1.read((char *)&p,sizeof(Tdato));
   f1.close();
  
   cout << x << endl;
   cout << f << endl;
   cout << a[0] << " " << a[1] << " " << a[2] << " " << a[3] << " " << a[4] << " " << endl;
   cout << nombre << endl;
   cout << p.b << endl;
   cout << p.s << endl;
   system("pause");
}

1 comentario: