Dimensioni di un file grande in C
Programmazione » Dimensioni file grandi c
04/05/2018 - 548
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