Como guardo Objetos en un fichero.

konak
26 de Mayo del 2004
Necesito guardar o objetos en un fichero y no se como hacerlo. Por ejemplo Una lista de Personas las cuales tienen por supuesto una un grupo de atributos. Si alguien pudiera recomendarme algo le estaria muy agradecido.

C0de
26 de Mayo del 2004
El siguiente codigo es para guardar un fichero binario (.dat), y despues leerlo.

#include <iostream>
#include <cstdlib>
#include <fstream>

using namespace std;

const int MAXCAD = 30;
typedef char TCadena[MAXCAD];

struct TElem{
int id;
TCadena nombre;
};

void guardarfichero(TElem &);
void leerfichero(TElem &);

int main()
{
TElem elem;
cout << "Introduce tu identificacion: ";
cin >> elem.id;
cout << "Introduce tu nombre: ";
cin >> elem.nombre;
guardarfichero(elem);
system("PAUSE");
leerfichero(elem);
cout << endl << "Los datos del fichero son: ";
cout <<"Nombre: "<<elem.nombre << endl;
cout <<"Identificacion: "<<elem.id<<endl;
system("PAUSE");
return 0;
}

void guardarfichero(TElem &elem)
{
ofstream fichero; //declaramos el fichero de tipo salida
fichero.open("persona.dat", ios::out | ios::binary);
if(!fichero){
cout << "No se pudo crear el fichero";
}
else{
fichero.write((char*) &elem, sizeof(TElem)); //escritura en fichero
}
cout << "Fichero grabado" << endl;
fichero.close();
}

void leerfichero(TElem &elem)
{
ifstream fichero; //declaramos el fichero de tipo entrada
fichero.open("persona.dat", ios::in | ios::binary);
if(!fichero){
cout << "No se pudo crear el fichero";
}
else{
fichero.read((char*) &elem, sizeof(TElem));
}
cout << "Fichero cargado" << endl;
fichero.close();
}

C0de
26 de Mayo del 2004
Cambiando los otros dos procedimientos por estos dos conseguiremos guardar y cargar el archivo en un fichero de texto



void guardarfichero(TElem &elem)
{
ofstream fichero; //declaramos el fichero de tipo salida
fichero.open("persona.txt", ios::out);
if(!fichero){
cout << "No se pudo crear el fichero";
}
else{
fichero << elem.id << " " << elem.nombre; //escritura en fichero
}
cout << "Fichero grabado" << endl;
fichero.close();
}

void leerfichero(TElem &elem)
{
ifstream fichero; //declaramos el fichero de tipo entrada
fichero.open("persona.txt", ios::in);//poniendo ios::app, no se sobreescribirá el fichero.
if(!fichero){
cout << "No se pudo crear el fichero";
}
else{
fichero >> elem.id;
cin.ignore();//a fin de evitar el espacio del txt entre la id y nombre
fichero >> elem.nombre;
}
cout << "Fichero cargado" << endl;
fichero.close();
}