C/Visual C - Actualización de Archivos en C++

 
Vista:

Actualización de Archivos en C++

Publicado por Alberto Frías (1 intervención) el 04/08/2005 20:09:46
Saludos amigos.

Tengo un programa que almacena un inventario de discos musicales, que graba sus datos en un registro del siguiente tipo:

struct StructRecord
{ long Clave;
char Definition[100];
int Existencias;
float Importe;
} RegistroInventario;

A la hora de grabar con fwrite y recuperar lo leido con fread, no existen problemas, no obstante si deseo actualizar recurro a la función fseek y me posiciono en el byte del archivo del registro que quiero sobreescribir con fwrite.

Entonces abro el archivo con fopen en el modo "r+", me posiciono en el byte del registro que quiero modificar calculando el byte con la fórmula ftell(pArchivo)-sizeof(RegistroInventario), leo los bytes escritos en esa posición, los modifico y los regrabo con fwrite pero ¡oh sorpresa!, se graban más o menos bytes de los que sizeof regresa.

Revisé a profundidad el archivo y resulta que a la hora de grabar la estructura, los tipos long, int y float están variando en tamaño a la hora de escribirse en el archivo según el número que se almacene en ellos.

El tipo char es el único que no varía su tamaño, pero no quiero convertir a char los demás campos porque están ligados a otra serie de programas e implicaría impactar a muchas otras rutinas que utilizan la estructura (digamos en mi trabajo hay unos 100 programas que la utilizan), así que si alguien qué solución podría haber para esto.

Por el tiempo que han dedicado a leerme, espero sus comentarios al respecto.

Saludos.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Actualización de Archivos en C++

Publicado por Fernando (18 intervenciones) el 07/08/2005 19:32:51
Lo primero que se me ocurre, es que abras el archivo como "r+b" ó "rb+" (creo que es indistinto), ya que en windows a diferencia de linux, los archivos se abren en modo texto de forma predeterminada, y puede ser (diria casi seguro que es) que por eso te escriba mal los tipos de datos long, etc. Prueba eso, de esta forma abres el archivo de forma binaria, y posiblemente funcione, si no es así, dimelo, y si puedes mandame algo del código, así lo pruebo yo.

Suerte.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar