Discussion:
recorrer un fichero dsd el final con fseek
(demasiado antiguo para responder)
HADES
2004-02-26 23:06:31 UTC
Permalink
como puedo recorrer un fichero dsd el final hasta el principio con el fseek?
gracias.
rooted
2004-02-27 11:16:29 UTC
Permalink
Supongo que te referiras a un fichero binario. Una solución posible seria:

1. Situate al final del fichero:

fseek(fichero, 0, SEEK_END);

2. Calculas el número de registros del fichero (si no lo has hecho ya
antes):

tamanyo = ftell(fichero); // tamanyo es un long
numReg = ( sizeof(struct TU_ESTRUCTURA) / tamanyo );

3. Luego haces una iteración desde el número de registros hasta cero:

for ( int i=tamanyo; i>=0; i--)
fseek( fichero, -sizeof(struct TU_ESTRUCTURA), SEEK_CUR);

Y bueno, cualquier operación que vayas a realizar mientras "rebobinas" el
fichero, la colocas
dentro del bucle for.

Si hay algún error, ya se sabe, problemas del directo ;).
Un saludo.
Post by HADES
como puedo recorrer un fichero dsd el final hasta el principio con el fseek?
gracias.
Mikel Irazabal
2004-02-27 11:54:23 UTC
Permalink
Post by rooted
2. Calculas el número de registros del fichero (si no lo has hecho ya
tamanyo = ftell(fichero); // tamanyo es un long
numReg = ( sizeof(struct TU_ESTRUCTURA) / tamanyo );
Creo que querías decir:

numReg = ( tamanyo / sizeof(struct TU_ESTRUCTURA));
Post by rooted
for ( int i=tamanyo; i>=0; i--)
fseek( fichero, -sizeof(struct TU_ESTRUCTURA), SEEK_CUR);
Una de dos:
for ( int i=tamanyo; i>=0; i -= sizeof(struct TU_ESTRUCTURA))
ó:
for ( int i=numReg; i>=0; i--)

Pero creo que el for que has puesto no es correcto.
Post by rooted
Si hay algún error, ya se sabe, problemas del directo ;).
Suele pasar (y lo mismo digo por mí, por si acaso ;-) ).


Hasta otra,

Mikel
rooted
2004-02-27 12:06:21 UTC
Permalink
Pues si que he me colado.
Bueno pido perdon por los posibles daños :P

Las prisas no son nada buenas...
Post by Mikel Irazabal
Post by rooted
2. Calculas el número de registros del fichero (si no lo has hecho ya
tamanyo = ftell(fichero); // tamanyo es un long
numReg = ( sizeof(struct TU_ESTRUCTURA) / tamanyo );
numReg = ( tamanyo / sizeof(struct TU_ESTRUCTURA));
Post by rooted
for ( int i=tamanyo; i>=0; i--)
fseek( fichero, -sizeof(struct TU_ESTRUCTURA), SEEK_CUR);
for ( int i=tamanyo; i>=0; i -= sizeof(struct TU_ESTRUCTURA))
for ( int i=numReg; i>=0; i--)
Pero creo que el for que has puesto no es correcto.
Post by rooted
Si hay algún error, ya se sabe, problemas del directo ;).
Suele pasar (y lo mismo digo por mí, por si acaso ;-) ).
Hasta otra,
Mikel
Loading...