Hola:
A ver si alguien te puede dar una explicación más técnica de como se comportan los objetos fstream.
Mientras, lo único que te puedo decir es que seekp() y tellp() son métodos de ostream.
Así que te puede funcionar esto. Es crear un objeto ifstream para la creación y llenado del archivo, y un objeto ofstream para su lectura:
Código C++:
Ver originalint main(int argc, char *argv[])
{
prueba P[3];
ofstream archivo ("probar", ios::out | ios::binary);
for(int i=0; i<3; i++)
{
cout<<"Numero "<<i+1<<": ";
P[i].escribir();
archivo.write((char *) &P, sizeof P);
}
archivo.close();
ifstream archivo2 ("probar", ios::in | ios::binary);
for(int i=0; i<3; i++)
{
archivo2.read((char *) &P, sizeof P);
P[i].leer();
}
int L = sizeof(P);
cout<<"\n";
cout<<"Longitud archivo: "<<L;
cout<<"\n";
int m;
cout<<"Ingresar numero de objeto: ";
cin>>m;
int pos = (m-1) * L;
//cout.setf(ios::hex, ios::basefield);
cout<<"Posicion Objeto: "<<pos<<"\n";
archivo2.seekg(0);
int start = archivo2.tellg ();
cout<<"Start: "<<start<<endl;
archivo2.seekg (0, ios :: end);
int end = archivo2.tellg ();
cout<<"End: "<<end<<endl;
int size = (end - start);
cout<<"Size: "<<size<<endl;
archivo2.seekg(0, ios::end);
long TamTotal = archivo2.tellg();
cout<<"Tamanio Total: "<<TamTotal;
cout<<"\n";
int CantObj = TamTotal/L;
cout<<"Cantidad de Objetos: "<<CantObj;
archivo2.close();
return 0;
}
Siento no ser de más ayuda. Bueno, también decir que hay que acostumbrase a los casting de C++. En este caso, donde pones:
Código C++:
Ver originalarchivo.write((char *) &P, sizeof P);
Código C++:
Ver originalarchivo2.read((char *) &P, sizeof P);
habría que hacer:
Código C++:
Ver originalarchivo2.write(reinterpret_cast<char *>(&P), sizeof(P));
Código C++:
Ver originalarchivo2.read(reinterpret_cast<char *>(&P), sizeof(P));