AD

Funzione ftell per ottenere posizione del file pointer in C

La funzione ftell in C è in grado di restituire la posizione attuale del file pointer all’interno del file specificato, rispetto alla posizione di inizio del file stesso. La sintassi della funzione ftell è la seguente:

long int ftell(FILE *fp);

dove fp è il puntatore al file ottenuto dalla funzione fopen. La funzione ftell restituisce un valore di tipo long int, che in caso di successo sarà positivo ed indicherà la posizione attuale del file pointer all’interno del file puntato da fp. Mentre in caso di errore la funzione ftell restituirà il valore -1. 

Nota: il valore restituito dalla funzione ftell non indica il numero di caratteri, bensì la dimensione in byte totale degli elementi che precedono la posizione attuale del file pointer.

Esempio di utilizzo della funzione ftell in C

Nel seguente esempio viene riportato un programma in grado di restituire la dimensione in byte dell’intero file specificato. In particolare viene usata la funzione fseek per spostare la posizione del file pointer alla fine del file e successivamente viene usata la funzione ftell per ottenere il numero di byte che costituiscono il file.

Supponiamo che il file usato sia già stato creato in precedenza e che contenga la seguente stringa "Benvenuti su Learnex.it".

Chiaramente per poter operare sul file con le funzioni fseek e ftell, dobbiamo innanzitutto aprire il file con la funzione fopen (possibilmente in modalità lettura per evitare errori), che ci restituirà il puntatore al file che verrà usato all’interno delle funzioni richieste, e verificare che il puntatore non sia nullo.

#include <stdio.h> int main(){     FILE* fp;     int b;     fp = fopen("test.txt", "r");     if(fp == NULL){         printf("Errore durante l'apertura del file!\n");     } else {         // Spostiamo il file pointer alla fine del file         fseek(fp, 0, SEEK_END);         // Calcoliamo il numero di byte dall'inizio fino al file pointer         b = ftell(fp);         printf("Dimensione file: %d byte", b);     }     fclose(fp);     return 0; } // Dimensione file: 23 byte