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