OldWildWeb Logo

Dimensioni di un file grande in C

Ottenere le dimensioni di files di grandi dimensioni in C, esempio


Come ottenere le dimensioni di files molto grandi in C

Non sempre è facilissimo lavorare con files molto grandi in C in ambiente Linux a causa di una documentazione non sempre chiara. Dopo aver avuto qualche difficoltà a gestire files di grandi dimensioni in C ho deciso di scrivere una serie di articoli al riguardo per semplificare la vita a chi riesce a raggiungere le pagine del sito web, in questo articolo mostrerò un esempio di come ottenere le dimensioni di un file molto grande in C con il compilatore GCC.

La prima cosa da fare è definire una constante tramite la direttiva #define _LARGEFILE64_SOURCE per abilitare il support LFS (large file support) in GCC, questa definizione va messa prima di tutti gli includes. fatto ciò non faremo altro che utilizzare le funzioni per la gestione dei files a 64 bit sostituendole alle classiche funzioni per la gestione dei files ad esempio avremmo le seguenti funzioni modificate in questo modo: fopen -> fopen64, ftell -> ftello64, fseek -> fseeko64, che serviranno rispettivamente per aprire un file, ottenere la posizione del cursore del file, e spostare il cursore del file.

La funzione FILE_GetFileSizeFromPath utilizza come tipo di dato "__off64_t" che non è altro che un long long int ovvero un integer con segno a 8 byte, se si preferisce si può tranquillamente sostituire il tipo di dato con l'integer a 8 byte.


//La seguente definizione va inserita prima degli includes
#define _LARGEFILE64_SOURCE
#include "stdio.h""
#include "stdlib.h"
#include "string.h"
__off64_t FILE_GetFileSizeFromPath(char *TheFileName);
__off64_t FILE_GetFileSizeFromPath(char *TheFileName)
{
__off64_t Prev = 0, TheFileSize = 0;
FILE *TheFilePointer = fopen64(TheFileName, "rb");
Prev = ftello64(TheFilePointer);
fseeko64(TheFilePointer, 0, SEEK_END);
TheFileSize = ftello64(TheFilePointer);
fseeko64(TheFilePointer, Prev, SEEK_SET);
fclose(TheFilePointer);
return TheFileSize;
}
int main(int argc, char** argv)
{
__off64_t theSize = 0;
theSize = FILE_GetFileSizeFromPath("/path/to/theLargeFile");
printf("\nSize : %lld ", theSize);
return (EXIT_SUCCESS);
}
Esempio output:
Size : 10565296876



Ottenere dimensione di file grandi in C linux gcc