Je veux juste trouver la taille du fichier à l’aide du programme c .. J’ai écrit un code mais il donne un résultat erroné
fseek(fp,0,SEEK_END); osize=ftell(fp);
Y-a t’il une autre possibilité?
L’appel système stat
est la solution habituelle à ce problème. Ou, dans votre cas particulier, fstat
.
ftell retourne un int. Si vous utilisez un système où int est de 32 bits et que votre fichier a plus de 2 Go, vous risquez de vous retrouver avec une taille négative. POSIX fournit ftello et fseeko qui utilisent un off_t. C a fgetpos et fsetpos qui utilisent fpos_t – mais fpos_t n’est pas un type arithmétique – il conserve les éléments liés à la gestion du jeu de caractères par les parameters régionaux, par exemple.
Il n’y a aucune raison pour que cela ne fonctionne pas.
Y-a t’il une autre possibilité? Vous pouvez utiliser stat si vous connaissez le nom du fichier:
struct stat st; stat(filename, &st); size = st.st_size;
Au fait, ftell retourne un long int
L’en – tête sys / stat.h définit la structure des données renvoyées par les fonctions fstat()
, lstat()
et stat()
.
Essayez d’utiliser _filelength . Ce n’est pas portable, cependant … Je ne pense pas qu’il existe un moyen complètement portable de faire cela.
Essayez ceci en utilisant fstat()
:
int file=0; if((file=open(,O_RDONLY)) < -1) return -1; // some error with open() struct stat fileStat; if(fstat(file,&fileStat) < 0) return -1; // some error with fstat() printf("File Size: %d bytes\n",fileStat.st_size);
La seule valeur de retour négative par ftell
est -1L en cas d’erreur. Si cela ne vous dérange pas d’utiliser WinAPI, obtenez la taille du fichier avec GetFileSizeEx
:
HANDLE hFile = CreateFile(filename, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); LARGE_INTEGER size; GetFileSizeEx(hFile, &size); printf("%ld", size.QuadPart); CloseHandle(hFile);