• Viernes 5 de Julio de 2024, 08:44

Autor Tema:  Problemas al Eliminar un dato del Archivo  (Leído 1370 veces)

brownsound

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Problemas al Eliminar un dato del Archivo
« en: Sábado 1 de Noviembre de 2008, 22:25 »
0
Hola a todos ! tengo un Grave problema al eliminar un dato especifico en el archivo, el hecho es que se terminan borrando todo y creando un nuevo registro.Espero que me puedan ayudar.

void eliminar(struct datos d)
 {int nb1=0, nb=-2,k=0;  //nb1=variable auxiliar para saber si kiere volver a buskar o salir  nb=variable ke guarda el #de registro buskado
 system("cls"); //borramos pantalla

    while (nb<0)
      { cout<<"Introduce el registro a buscar [0 para salir]: "; cin>>nb; }
    if (nb!=0) //si kiere buskar...
      {
      ifstream reg("banco.dat", ios::in | ios::binary);      //activa el archivo en modo de lectura (creamos el objeto 'reg')
      reg.seekg((nb-1)*sizeof(d));     //colocamos el apuntador en la posicion inicial del registro encontrado
      reg.read((char *) &d, sizeof d);        //leemos el registro encontrado
      //verificamos que el registro es correcto
      if ((d.valido==1) && (d.valido2==1706887114))
        {
        cout<<endl<<endl<<"--------Registro encontrado--------"<<endl;
        cout<<"Nombre: "<<d.nombre<<endl<<"Apellido:"<<d.apellido<<endl<<"Telefono: "<<d.telefono<<endl<<"Direccion: "<<d.direccion<<endl<<"Email: "<<d.email<<endl<<"saldo disponible:"<<d.saldo<<endl<<"depositos:"<<d.deposito<<endl<<"retiros:"<<d.retiro<<endl<<endl;
       
        d.valido=0;   //modificamos "valid0" del struct para decir ke ese registro no sera tomado en cuenta
        d.valido2=1706887114; //agregamos nuestra garantia de registro
        cout<<"desea eliminar el archivo presione 1, de lo contrario 0?";
        cin>>k;
        if(k==1)
        {
       //ahora actualizamos el registro
       ofstream reg("banco.dat", ios::out | ios::binary); //activamos el archivo en modo de escritura  (creamos el objeto 'reg')
       if(!reg)                         //si no se pudo abrir el archivo
      { cout <<"No se puede abrir el fichero."<<endl; system("pause");}
        reg.seekp((nb-1)*sizeof(d));     //colocamos el apuntador en la posicion inicial del registro a modificar
        reg.write((char *) &d, sizeof(d));  //escribimos el nuevo registro
        reg.close();  //cerramos el archivo
        cout<<endl<<"Registro eliminado"<<endl;
        system("pause"); } }

else //si el registro encontrado no es correcto
        {
         cout<<endl<<"El registro buscado no existe"<<endl;
         system("pause");
         nb1=1;
        } }
        else     //si ya se kiere salir
      { nb1=4; } //igualamos la bandera a 4 para ke se salga
     //endwhile

 }

Schweiko

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
    • http://www.alemnet.com.ar
Re: Problemas al Eliminar un dato del Archivo
« Respuesta #1 en: Lunes 10 de Noviembre de 2008, 17:42 »
0
estube mirando tu codigo...
prueba lo siguiente..
en la seccion de eliminacion del archivo no uses la clase ofstream, utiliza fstream..
fstream(MIARCHIVO, ios::in||ios::out||ios::binary||ios::app);

porq si no pones el ios::app se toma como default q trunq el archivo :D y eso es lo q borra el archivo completo..

supongo q es similar lo q pasa con el ofstream pero no recuerdo bien xq hace rato no toco el ofstream ni el ifstream...
prefiero utilizar FSTREAM :D

espero t sirva
un abrazo