[C con Clase] Retroceder el puntero en archivo binario

Salvador Pozo salvador en conclase.net
Mie Jun 18 10:16:46 CEST 2008


El pasado 2008-06-17 02:39:35, Carolina Herrera escribió:
 
CH> Hola chicos!!!
CH> Hola Luis, esa es la forma en la que normalmente lo hacia, pero la opción que daba Salvador me parecía mucho más sencilla, lastimosamente aún no logro hacer que funcione =(
CH> Si alguien sabe cual es el error que estoy cometiendo, ya lo busqué y probé de varias formas diferentes, pero nada de nada =(
CH> fseek(nom_arch, -sizeof(nom_reg), SEEK_CUR);
CH> Utilizo Windows XP y Borland C++ 3.0

Hola:

Para empezar, yo cambiaría de compilador, la versión 3.0 de Borland C++ está obsoleta, en lo que se refiere al estándar actual de C++. (Te recomiendo Dev-C++ o Code::Blocks).

Esto no es, de todos modos, motivo suficiente para que no te funcione la solución propuesta para retroceder un registro en un fichero de acceso aleatorio.

Es posible que el error esté en otra parte del código (por ejemplo, en las opciones a la hora de abrir el fichero). Tal vez deberías incluir un fragmento mayor del código, o un programa de ejemplo que no te funcione como esperabas.

Tal vez sea obvio, pero esta sentencia funcionará sólo después de una lectura o escritura de un registro. Cuando se hace, la siguiente lectura se hará del mismo registro, y si se trata de una escritura, se sobrescribirá el mismo registro.

En muchos compiladores no funcionará si se ha alcanzado el fin de fichero en la última lectura, y tampoco debería funcionar con ficheros abiertos con la opción "a" (append), en la que las escrituras *siempre* se harán al final del fichero.

No te rindas, te aseguro que esto funciona, tan sólo hay que averiguar por qué no lo hace en tu caso.

Hasta pronto.

-- 
Salvador Pozo (Administrador)
mailto:salvador en conclase.net


Más información sobre la lista de distribución Cconclase