Ver Mensaje Individual
  #2 (permalink)  
Antiguo 15/10/2013, 06:27
WinderJerter
 
Fecha de Ingreso: agosto-2009
Mensajes: 292
Antigüedad: 15 años, 5 meses
Puntos: 5
Respuesta: editar registro c++

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 original
  1. void Empleado::modificar() {
  2.     int contador = 0, pos = 0, opc;
  3.     char b_id[ 22 ], m_nombre[ 22 ];
  4.    
  5.     ifstream archivo_leer( "archivo.dat", ios::in );
  6.    
  7.     if( archivo_leer.fail() ) {
  8.         cerr << "Error al leer el archivo" << endl;
  9.         exit( 1 );
  10.     }
  11.    
  12.     cout << "Buscar ID: "; cin >> b_id;
  13.    
  14.     while( !archivo_leer.eof() ) {
  15.         archivo_leer.read( ( char * )&e, sizeof( e ) );
  16.        
  17.         pos = pos + sizeof( e );
  18.        
  19.         if( archivo_leer.eof() ) {
  20.             break;
  21.         }
  22.        
  23.         if( strcmp( b_id, id ) == 0 ) {
  24.             cout << "\nID: " << id << endl;
  25.             cout << "Nombre: " << nombre << endl;
  26.             cout << "Sexo: " << sexo << endl;
  27.             cout << "Estado civil: " << edo_civil << endl;
  28.             cout << "Departamento: " << departamento << endl;
  29.             cout << "Sueldo: $" << sueldo << endl << endl;
  30.            
  31.             cout << "Esta seguro que sea modificar este empleadp? 1) SI, 2) NO: "; cin >> opc;
  32.            
  33.             if( opc == 1 ) {
  34.                 cout << "\nModificar nombre: "; cin >> m_nombre;
  35.        
  36.                 ofstream archivo_escribir( "archivo.data", ios::binary | ios::app );
  37.                 archivo_escribir.seekp( ( pos - sizeof( e ) ) + sizeof( id ), ios::beg );
  38.                 archivo_escribir.write( ( char * ) &nombre, sizeof( nombre ) );
  39.                
  40.                 archivo_escribir.close();
  41.             }
  42.            
  43.             contador++;
  44.         }
  45.     }
  46.    
  47.     archivo_leer.close();
  48.    
  49.     if( contador == 0 ) {
  50.         cout << "\nNo se encontro ningun empleado con el ID: " << b_id << endl;
  51.     }  
  52. }