Ver Mensaje Individual
  #1 (permalink)  
Antiguo 05/03/2008, 14:04
Avatar de arwen_1
arwen_1
 
Fecha de Ingreso: diciembre-2006
Mensajes: 81
Antigüedad: 18 años, 1 mes
Puntos: 0
Pregunta Eliminar archivos

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

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 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

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