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
}