Hol, tengo el siguiente código que funciona. El código escribe o lee en un archivo .dat :
int main()
{
setlocale(LC_ALL, "");//para los acentos
vector<Cliente> clientes;
vector<Chofer> choferes;
bool leer=true;
if(!leer)
{
ofstream archivo("cliente.dat",ios::binary);
cout << "escribir";
if(!archivo)
{
cout << "error";
}
else
{
Cliente cli=Cliente();
cli.SetIdentificacion("11");
cli.SetApellidos("jv");
cli.SetDireccion("hbhk");
cli.SetNombre("hkbhjkb");
cli.SetTelefono("bj");
cli.SetEmail("hbjhbj");
clientes.push_back(cli);
for(Cliente c:clientes)
{
archivo.write(reinterpret_cast<const char*>(&c),
sizeof(Cliente));
}
}
}
else
{
cout <<"leer";
ifstream lectura("cliente.dat",ios::in);
while(lectura&&!lectura.eof())
{
Cliente cl=Cliente();
lectura.read(reinterpret_cast<char*>(&cl),
sizeof(Cliente));
cout << cl.GetIdentificacion() << endl;
cout << cl.GetApellidos() << endl;
cout << cl.GetEmail() << endl;
}
}
return 0;
}
Hasta aquí todo bien , pero cuando quiero llamarlo desde un método me devuelve caracteres extraños:
void lecturaCliente()
{
ifstream lectura("cliente.dat",ios::in);
while(lectura&&!lectura.eof())
{
Cliente cl=Cliente();
lectura.read(reinterpret_cast<char*>(&cl),
sizeof(Cliente));
cout << cl.GetIdentificacion() << endl;
cout << cl.GetApellidos() << endl;
cout << cl.GetEmail() << endl;
}
}
bool escrituraCliente(vector<Cliente> clientes)
{
ofstream archivo("cliente.dat",ios::binary);
if(clientes.size()>0)
{
for(Cliente c:clientes)
{
cout << c.GetIdentificacion()<<"escr"<<endl;
archivo.write(reinterpret_cast<const char*>(&c),
sizeof(Cliente));
}
return true;
}
else
{
return false;
}
}
int main()
{
setlocale(LC_ALL, "");//para los acentos
vector<Cliente> clientes;
vector<Chofer> choferes;
bool leer=true;
if(!leer)
{
ofstream archivo("cliente.dat",ios::binary);
cout << "escribir";
if(!archivo)
{
cout << "error";
}
else
{
Cliente cli=Cliente();
cli.SetIdentificacion("11");
cli.SetApellidos("jv");
cli.SetDireccion("hbhk");
cli.SetNombre("hkbhjkb");
cli.SetTelefono("bj");
cli.SetEmail("hbjhbj");
clientes.push_back(cli);
for(Cliente c:clientes)
{
archivo.write(reinterpret_cast<const char*>(&c),
sizeof(Cliente));
}
}
}
else
{
cout <<"leer";
lecturaCliente();
}
return 0;
}
Como se observa, el mismo código que tenía en el main simplemente lo pase a un método, eso fue todo lo que hice. Porque cuando invoco el mismo código desde un método devuelve caracteres extraños, como caracteres ascii o algo así es lo que devuelve!!
#ifndef CLIENTE_H
#define CLIENTE_H
#include <string>
using std::string;
//Se utiliza std::string para poder hacer uso de el tipo string en la clase
class Cliente
{
public:
Cliente();
string GetIdentificacion() { return Identificacion; }
void SetIdentificacion(string val) { Identificacion = val; }
string GetNombre() { return Nombre; }
void SetNombre(string val) { Nombre = val; }
string GetApellidos() { return Apellidos; }
void SetApellidos(string val) { Apellidos = val; }
string GetDireccion() { return Direccion; }
void SetDireccion(string val) { Direccion = val; }
string GetTelefono() { return Telefono; }
void SetTelefono(string val) { Telefono = val; }
string GetEmail() { return Email; }
void SetEmail(string val) { Email = val; }
protected:
private:
string Identificacion;
string Nombre;
string Apellidos;
string Direccion;
string Telefono;
string Email;
};
#endif // CLIENTE_H