Bonjour,

J'écris un petit programme utilisant la fonction stat (et lstat) sous Linux pour afficher des informations sur les fichiers du dossier passé en paramètre. L'une d'entre elles est la taille totale, cependant je me rends compte qu'après un certain point, la variable n'est plus sauvegardée. J'ai cherché pendant des heures mais j'en ai pas trouvé la cause donc je demande votre aide. Voici une partie de mon code :

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
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
 while ((entry = readdir(dir)) != NULL) {
printf("Taille Totale : %ld \n", taille);
printf("Taille Totale2 : %ld \n", tailleTotale);
char path[1024];
 
 
if (entry->d_type == DT_DIR) {
 
 
 
snprintf(path, sizeof(path), "%s/%s", name, entry->d_name);
//snprintf(parent, sizeof(parent), "%s", entry->d_name);
//printf("%s", parent);
 
if ( stat( path, &file_stat ) != 0 ) {
fprintf( stderr, "Failed to stat \"%s\": %s\n",
file_path, strerror( errno ) );
}
file_size = file_stat.st_size;
 
if (strcmp(entry->d_name, "..") != 0 && premier == 0) {
tailleTotale += file_stat.st_size;
 
}
 
if (strcmp(entry->d_name, ".") != 0) {
premier ++;
printf("PREMIER = %d\n", premier);
}
 
printf("++++%ld++++1", tailleTotale);
 
printf("%ld\t%s\n", file_size,entry->d_name);
 
if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0) {
continue;
}
 
// printf("[%s]\n", entry->d_name);
backup = tailleTotale;
 
listdir(path, tailleTotale, compteur);
} else {
 
snprintf(path, sizeof(path), "%s/%s", name, entry->d_name);
 
if ( lstat( path, &file_stat ) != 0 ) {
fprintf( stderr, "Failed to stat \"%s\": %s\n",
file_path, strerror( errno ) );
}
 
/*if ((file_stat.st_mode & S_IFMT) == S_IFLNK) {
tailleTotale += file_stat.st_size;
}*/
if (S_ISLNK(file_stat.st_mode)) printf ("lstat says link\n");
 
file_size = file_stat.st_size;
tailleTotale += file_stat.st_size;
//printf("%ld file_size, %d, tailleTotale", file_size, tailleTotale);
backup = tailleTotale;
 
 
 
printf("%ld\t%s\n", file_size,entry->d_name);
 
 
printf("++++%ld++++2", tailleTotale);
 
}
printf("++++%ld+++--3", tailleTotale);
}
 
 
 
closedir(dir);
 
}
Et ce qui en résulte lors de l'exécution :
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
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
Taille Totale : 0
Taille Totale : 0
Taille Totale2 : 0
++++65++++165 .
Taille Totale : 0
Taille Totale2 : 65
PREMIER = 1
++++65++++14096 ..
Taille Totale : 0
Taille Totale2 : 65
50 fich1.txt
++++115++++2++++115+++--3Taille Totale : 0
Taille Totale2 : 115
20 fich2.txt
++++135++++2++++135+++--3Taille Totale : 0
Taille Totale2 : 135
PREMIER = 2
++++135++++138 rep1
Taille Totale : 135
Taille Totale : 135
Taille Totale2 : 135
++++173++++138 .
Taille Totale : 135
Taille Totale2 : 173
PREMIER = 1
++++173++++165 ..
Taille Totale : 135
Taille Totale2 : 173
50 fich3.txt
++++223++++2++++223+++--3Taille Totale : 135
Taille Totale2 : 223 
50 fich4.txt
++++273++++2++++273+++--3++++135+++--3Taille Totale : 0
Taille Totale2 : 135 <------------------------------- Ici est le problème, la variable s'additionne, mais au mauvais nombre. C'est supposé d'etre 273 pour donner 287 au lieu de 149 à la fin
lstat says link
14 lien_symb
++++149++++2++++149+++--3[
Merci de votre aide