
18/08/2014, 22:22
|
| | Fecha de Ingreso: octubre-2011
Mensajes: 17
Antigüedad: 13 años, 5 meses Puntos: 0 | |
Respuesta: Problema con tellg() - Archivos Cita:
Iniciado por dehm 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));
Hola, Dehm..pense que ya nadie responderia a esta problema que me surgio jaja. Gracias por contestar y por tu ayuda, mañana pruebo con esto que me decis y si me da los resultados deseados o no lo hare saber. Un abrazo |