AnteriorPosterior

6.9 Acceder a cualquier posición de un fichero

  Curso: Fundamentos de programación en C, por Nacho Cabanes

6.9 Acceder a cualquier posición de un fichero

Cuando trabajamos con un fichero, es posible que necesitemos acceder directamente a una cierta posición del mismo. Para ello usamos “fseek”, que tiene el formato:

int fseek(FILE *fichero, long posicion, int desde);

Como siempre, comentemos qué es cada cosa:

  • Es de tipo “int”, lo que quiere decir que nos va a devolver un valor, para que comprobemos si realmente se ha podido saltar a la dirección que nosotros le hemos pedido: si el valor es 0, todo ha ido bien; si es otro, indicará un error (normalmente, que no hemos abierto el fichero).
  • “fichero” indica el fichero dentro de el que queremos saltar. Este fichero debe estar abierto previamente (con fopen).
  • “posición” nos permite decir a qué posición queremos saltar (por ejemplo, a la 5010).
  • “desde” es para poder afinar más: la dirección que hemos indicado con posic puede estar referida al comienzo del fichero, a la posición en la que nos encontramos actualmente, o al final del fichero (entonces posic deberá ser negativo). Para no tener que recordar que un 0 quiere decir que nos referimos al principio, un 1 a la posición actual y un 2 a la final, tenemos definidas las constantes:

SEEK_SET (0): Principio
SEEK_CUR (1): Actual
SEEK_END (2): Final

 

Vamos a ver tres ejemplos de su uso:

  • Ir a la posición 10 del fichero: fseek(miFichero, 10, SEEK_SET);
  • Avanzar 5 posiciones a partir de la actual: fseek(miFichero, 5, SEEK_CUR);
  • Ir a la posición 8 antes del final del fichero: fseek(miFichero, -8, SEEK_END);

Finalmente, si queremos saber en qué posición de un fichero nos encontramos, podemos usar “ftell(fichero)”.

Esta orden nos permite saber también la longitud de un fichero: nos posicionamos primero al final con “fseek” y luego comprobamos con “ftell” en qué posición estamos:

fseek(fichero, 0, SEEK_END);
longitud = ftell(fichero);

Ejercicios propuestos :

  • Ampliar el programa anterior (el ?array de structs? con 10 personas) para que el dato que indique el usuario se lea sin leer y descartar antes los que le preceden, sino que se salte directamente a la ficha deseada usando ?fseek?.

 

Actualizado el: 25-07-2014 16:54

AnteriorPosterior