Ver Mensaje Individual
  #1  
Antiguo 05-03-2008
tamarinda tamarinda is offline
Registrado
 
Registrado: mar 2008
Posts: 4
Reputación: 0
tamarinda Va por buen camino
Exclamation Eliminar registro en archivo binario

Por si fuera poco, la conspiracion de los archivos contra mi sigue! :neurotico

Ahora tengo el caso de eliminar un registro de un archivo.
Para esto, hago uso de un archivo auxiliar donde ire copiando todos aquellos registros del base que NO sean el que deseo eliminar.
Se supone, que luego de hacer la copia anterior debo, eliminar el archivo original o renombrarlo. es decir, colocarle al auxiliar el nombre del base.

He probado con las funciones, rename & remove, pero no me han funcionado :borracho: por ser novata en este compilador, no se si estas funciones no puedan ser utilizadas en C++ al igual que en C.

Buscando en San Google, he encontrado tambien las funciones: RenameFile & MoveFile, pero tampoco me han funcionado.

Por lo que quisiera saber, si existen (supongo que si) y cuales son las funciones que permiten renombrar y/o eliminar un archivo.

De igual manera les coloco el codigo:stress:

Código:
//ELIMINAR: elimina una estacion
void estaciones::eliminar(struct_estacion esta_actual)
{
        //abro archivo binario "ORIGINAL"
        FILE *ap_b=NULL;
        ap_b=fopen("estacion_b.dat","rb");
        //abro archivo binario "AUXILIAR"
        FILE *aux=NULL;
        aux=fopen("auxi.dat","wb");
        if (ap_b!=NULL)
        {
                struct_estacion tmp;
                int xx, num_reg, cont;

                fseek(ap_b,0,SEEK_END);
                xx=ftell(ap_b);
                num_reg=xx/(sizeof(struct_estacion));
                //leer del archivo y comparar
                for (cont=0;cont<=num_reg;cont++)
                {
                        fseek(ap_b,cont*sizeof(struct_estacion),SEEK_SET);
                        fread(&tmp,sizeof(struct_estacion),1,ap_b);
                        int comparacion_cad;
                        comparacion_cad=strcmp(tmp.nombre,esta_actual.nombre);
                        //si NO tiene el mismo nombre al introducido a eliminar
                        //entonces copialo al archivo auxiliar
                        if (comparacion_cad!=0)
                        {
                                fwrite(&tmp,sizeof(struct_estacion),1,aux);
                        }
                }
                fclose(ap_b);
                fclose(aux);
                //elimino el ahora viejo archivo de estaciones
//                DeleteFile("estacion_b.dat");
//                remove("estacion_b.dat");

                //renombrar el archivo auxiliar
//                RenameFile("auxi.dat","estacion_b.dat");
//                rename("auxi.dat","estacion_b.dat");

        }
};

Esperando su respuesta! :-) Gracias de antemano :-)
Responder Con Cita