Como Guardar objetos en ficheros

konak
31 de Mayo del 2004
Necesito guardar en un fichero. Por ejemlo tengo una clase que contiene un arreglo de personas y quiero guardar cada una de objeto personas en un fichero. Quisiera que alguien me respondiera esto lo antes posible. Pero no uasndo las struct de c, sino las clases (o sea class). Programo en c++ y de veras que necesito saber eso. Si pueden me envian un pequeno ejemplo donde yo pueda ver mas claro esa procedimiento. saludos Konak

Alejandro_
31 de Mayo del 2004
Supongo que ese *arreglo* de personas estará organizado de alguna manera, y quizás, los datos de cada persona se agrupen en alguna forma de estructura (struct o class, que viene a ser lo mismo, con la diferencia de que una struct, por defecto, tiene todos sus miembros públicos; mientras que una class, por defecto, tiene sus miembros privados).

Bueno, para escribir y leer un archivo (o cualquier cosa que tenga asociado un descriptor de archivo), la biblioteca estándar C++ tiene la clase fstream.

Sólo hay que tener cuidado cuando lo que quiere escribirse (o leerse) no está organizado como *POD* (plain old data), y nada de punteros, por ejemplo, ya que no tiene sentido guardar en un archivo la dirección de memoria donde se encuentra algún dato en este momento...

Así que yo te diría que leas en la ayuda de tu compilador o en algún manual, sobre la clase fstream.

Me resulta bastante difícil adivinar un ejemplo de algo que aún no nos dices, pero algo simple podría ser:

struct persona
{
char nombre[100];
int peso;
};

// para escribir:
void escribir(persona fulano) {
fstream archivo ("c:\algo.dat");
archivo.write(reinterpret_cast<char*> (&fulano),sizeof(persona));
archivo.close();
}

// y para leer del archivo:
void leer()
{
persona fulano;
fstream archivo("c:\algo.dat");
archivo.read(reinterpret_cast<char*> (&fulano),sizeof(persona));
archivo.close();

cout<<fulano.nombre<<endl;
cout<<"peso :"<< fulano.peso <<endl;

}

Como debes tener todo un array de estructuras, tendrás que hacer más o menos lo mismo para cada una. Ah, y seguramente tendrás que escribir en el archivo la cantidad de estructuras que vas a guardar, o determinarlas con el tamaño del total del archivo/el tamaño de cada estructura. Es un trabajito.

Alejandro