PDA

Ver la Versión Completa : Modificar registro en archivo binario


tamarinda
05-03-2008, 21:50:15
Holas foreros!

Estoy trabajando con archivos binarios. :policia:

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!


//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 :-)

Antonioveneroso
06-03-2008, 19:30:40
Hace mucho que no trabajo con archivos binarios, pero tienes esta linea
ap_b=fopen("estacion_b.dat","rb");
estás diciendo que abra estacion_b.dat como lectura, al menos eso creo... y no puedes escribir en un archivo de lectura, ¿o sí?
Espero haber servido de ayuda.
Saludos y suerte!

tamarinda
06-03-2008, 20:56:53
Dioooooooossss!! que horrorrrr!! :o

Era eso... :o:o:o:o:o:o

Antonioveneroso
06-03-2008, 21:01:20
Me da gusto haberte podido ayudar!
Cualquier otra cosa, ya sabes, por aquí estamos.
Saludos y suerte!