Jump to content

Recommended Posts

Hola, he estado tratando de pasar de C a C++, y se me ha complicado un poco esto. Antes trabajaba con estructuras y las sabía pasar a archivos binarios con fwrite y fread, pero en C++ no se pasar las clases a archivos binarios, o es acaso que las clases no se pueden pasar y solo se pasan las estructuras? despues de todo no tiene sentido enviar funciones a archivos binarios o si? Si tengo por ejemplo una clase asi:

 

#include <string>
class producto
{
     private:
        int id;
        string nombre;

     public:
          int getId();
          void setId( int _id);
          string getNombre();
          void setNombre( string _nombre);
}

 

Y la quiero guardar en un archivo binario con muchos productos, ¿Está bien hecho esto?

 

                producto prod;
                ofstream fsalida;
                prod.setNombre("NombrePrueba");
                prod.setId(4343434);
                fsalida.open("prueba.dat", ios::out | ios::binary);
                fsalida.write(reinterpret_cast<char *>(&prod), sizeof(producto));
                fsalida.close();

 

 

Y esto lo hice para leerla, pero me da problemas de memoria creo.

    producto prod;
    ifstream fentrada;
    
    fentrada.open("prueba.dat", ios::in | ios::binary);
    fentrada.read(reinterpret_cast<char *>(&prod), sizeof(producto));
    while (!fentrada.eof())
    {
        cout << prod.getId() << " ";
                << prod.getNombre() << endl;
        fentrada.read(reinterpret_cast<char *>(&prod), sizeof(producto));
    }
    //fentrada.close();
    return;

Link to comment
Share on other sites

Muchas gracias, me han servido mucho esos link, te pasaste :)

Después de todo no estaba tan mal, pero ahora probando cosas, he descubierto que me arroja problemas de memoria cuando mis atributos son "string", ya que al comentar todos esos atributos pude escribir y leer del archivo sin problemas.

Ahora mi duda es si puedo poner string, o tendré que simplemente dejarlos como arreglos de char.

 

PD: Alguien sabe como hacer el tipico getch() de conio.h pero en linux, g++. que quiero en algunas partes poner algo como (para que se pueda leer el cout y no se lo salte rapidamente):

cout << "Presione una tecla para continuar.\n" << endl;
getch();
system("clear");
// cosas.

Edited by TKA
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...