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