ftell()

ftell(<handle>)

Retorna:

La posición actual del puntero de lectura/escritura de un archivo.

Descripción:

Retorna la posición del puntero de lectura/escritura de un archivo, para ello requiere únicamente el <handle> o identificador de archivo devuelto por la función fopen() al abrirlo.

Para establecer una nueva posición del puntero de un archivo, se debe utilizar la función fseek(). A diferencia de esta última función, ftell() siempre retorna la posición del puntero respecto al inicio del archivo.

Todas las operaciones de lectura o escritura sobre un archivo avanzan automáticamente el puntero del mismo, de forma que todos estos accesos se realicen de forma secuencial (leyendo o escribiendo los datos unos a continuación de otros).

Programa ejemplo:
PROGRAM ejemplo_ftell;

GLOBAL
    mitabla[3]=11,22,33,44;
    midato1;
    midato2;
    mihandle;

BEGIN
    mihandle=fopen("help\help.dat","w");

    midato1=ftell(mihandle); // Posición del puntero antes de escribir

    fwrite(OFFSET mitabla,4,mihandle);

    midato2=ftell(mihandle); // Posición del puntero tras escribir los datos

    fclose(mihandle);
END


Este ejemplo escribe los cuatro datos contenidos en mitabla (11,22,33 y 44) en el archivo help.dat.

Tras abrir el archivo con fopen(), se obtiene la posición del puntero y se guarda en midato1 (esta será 0, al inicio del archivo).

Entonces se escriben en el archivo los cuatro valores contenidos en la tabla y se vuelve a obtener la posición del puntero, que ahora se guarda en midato2 (será 4, al final del archivo, tras los cuatro valores escritos).

Finalmente, se cierra el archivo con fclose() antes de finalizar.


Nota: Por defecto, la <posición del puntero> se especifica como un número de datos simples, teniendo en cuenta que un dato simple (una variable) ocupa 4 bytes. Es decir, que si por ejemplo, el puntero se encuentra en la posición diez (siempre a partir del inicio del fichero), se podrá entonces acceder a los datos contenidos en el archivo a partir del byte cuarenta.

Se puede cambiar esta relación modificando la variable global unit_size, que por defecto vale 4 en todos los programas.


Nota: La función filelength() permite averiguar la longitud de un archivo, para ello se debe abrir previamente el mismo.


Ver: fseek() - fread() - fwrite() - unit_size