Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Modificar archivos

Estas en el tema de Modificar archivos en el foro de C/C++ en Foros del Web. Holas foreros! Estoy trabajando con archivos binarios. Uno de los requermientos que tengo, es modificar un registro , por ejemplo, cambiandole la ubicacion (coordenadas x ...
  #1 (permalink)  
Antiguo 05/03/2008, 14:01
Avatar de arwen_1  
Fecha de Ingreso: diciembre-2006
Mensajes: 81
Antigüedad: 17 años, 4 meses
Puntos: 0
Pregunta Modificar archivos

Holas foreros!

Estoy trabajando con archivos binarios.

Uno de los requermientos que tengo, es modificar un registro, por ejemplo, cambiandole la ubicacion (coordenadas x e y).

Para esto, recorro el archivo y al encontrar el registro que deseo modificar, ubico (fseek) el apuntador del archivo una posicion antes, y escribo el nuevo registro.
El problema basicamente es que no escribe los cambios en el archivo. He hecho corridas por trazas aproximadamente unas mil veces y hace todo como si lo estuviera escribiendo, pero al confirmarlo en otra funcion, veo que no lo hace.

Espero entonces puedan revisar el codigo a continuacion, a ver si encuentran algun error.. paranormal!

Código:
//MODIFICAR: modifica una estacion
void estaciones::modificar(struct_estacion esta_actual)
{
        //abro archivo binario "ORIGINAL"
        FILE *ap_b=NULL;
        ap_b=fopen("estacion_b.dat","rb");
        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 tiene el mismo nombre
                        if (comparacion_cad==0)
                        {
                                fseek(ap_b,(-1)*sizeof(struct_estacion),SEEK_CUR);
                                fwrite(&esta_actual,sizeof(struct_estacion),1,ap_b);
                                fclose(ap_b);
                                break;
                        }
                }
                fclose(ap_b);
        }
};

Esperando su respuesta! Gracias de antemano
  #2 (permalink)  
Antiguo 06/03/2008, 14:07
Avatar de arwen_1  
Fecha de Ingreso: diciembre-2006
Mensajes: 81
Antigüedad: 17 años, 4 meses
Puntos: 0
Re: Modificar archivos

Problema solucionado!

Realmente el problema era algo totalmente obvio pero que no me habia dado cuenta!

Código:
  ap_b=fopen("estacion_b.dat","rb");
Como verán estaba abriendo en modo LECTURA, y como queria modificar tenia que abrirlo a modo Lectura/ Escritura : a+b

Gracias a AntonioVeneroso, de Foros Club Delphi por haberse tomado la molestia de ver el codigo y darse cuenta!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:42.