Bonjour

Je cherche à connaitre la taille de certains fichiers en octets.

Voici les 2 méthodes que j'ai tentée.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
 
int main(int argc, char *argv[] )
{
    struct stat buf;
    int result;
    long size;
    FILE *fd;
    result = stat ( argv[1], &buf );
    if (result == -1 ) return (-1);
    fprintf(stdout, "1)Taille de '%s' : %ld octets\n", argv[1], (long )buf.st_size);
    if (( fd = fopen (argv[1], "rb")) == NULL)
    {perror("\t fopen() ");return (-1); }
    fseek(fd, 0, SEEK_END);
    size = ftell(fd);
    fclose (fd);
    fprintf(stdout, "2)Taille de '%s' : %ld octets\n", argv[1], size);
    return 0;
}
Ces 2 méthodes marche trés bien sur des fichiers de plusieurs Mo mais qand je fait le test sur un fichier de plusieurs Go ca ne marche pas.

Exemple:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
 
$ ./test /mnt/data/LiveCD.iso  // Taille réelle 735715328 octets
1)Taille de '/mnt/data/LiveCD.iso'  : 735715328 octets
2)Taille de '/mnt/data/LiveCD.iso'  : 735715328 octet
$ ./test /mnt/data/LiveDVD.iso  // Taille réelle 4681426944 octets
1)Taille de '/mnt/data/LiveDVD.iso' : 386459648 octets
2)Taille de '/mnt/data/LiveDVD.iso' : 386459648 octets

J'ai consulté la FAQ qui parle de la secondes méthodes.
Bref je suis coincé.

Si vous avez des idées pour moi, j'en serais ravie