Hola que tal, investigando encontré que con seekp podía editar un registro y lo que pasa es que no se como adaptarlo bien, en la parte de "( pos - sizeof( e ) ) + sizeof( id )" ya me posiciona bien pero el problema es que no me guarda el cambio de nombre. ¿Alguien sabe donde esta esta el error?
Les dejo el código abajo para ver si alguien me puede ayudar. Saludos y gracias de antemano
Código C++:
Ver originalvoid Empleado::modificar() {
int contador = 0, pos = 0, opc;
char b_id[ 22 ], m_nombre[ 22 ];
ifstream archivo_leer( "archivo.dat", ios::in );
if( archivo_leer.fail() ) {
cerr << "Error al leer el archivo" << endl;
}
cout << "Buscar ID: "; cin >> b_id;
while( !archivo_leer.eof() ) {
archivo_leer.read( ( char * )&e, sizeof( e ) );
pos = pos + sizeof( e );
if( archivo_leer.eof() ) {
break;
}
if( strcmp( b_id
, id
) == 0 ) { cout << "\nID: " << id << endl;
cout << "Nombre: " << nombre << endl;
cout << "Sexo: " << sexo << endl;
cout << "Estado civil: " << edo_civil << endl;
cout << "Departamento: " << departamento << endl;
cout << "Sueldo: $" << sueldo << endl << endl;
cout << "Esta seguro que sea modificar este empleadp? 1) SI, 2) NO: "; cin >> opc;
if( opc == 1 ) {
cout << "\nModificar nombre: "; cin >> m_nombre;
ofstream archivo_escribir( "archivo.data", ios::binary | ios::app );
archivo_escribir.seekp( ( pos - sizeof( e ) ) + sizeof( id ), ios::beg );
archivo_escribir.write( ( char * ) &nombre, sizeof( nombre ) );
archivo_escribir.close();
}
contador++;
}
}
archivo_leer.close();
if( contador == 0 ) {
cout << "\nNo se encontro ningun empleado con el ID: " << b_id << endl;
}
}