Bonjour j'aimerais savoir si il existe une fonction ou un moyen en C qui permet d'ouvrir tous les fichiers d'une même extension (ici les .bat) d'un même répertoire, je coince un peu là, vous avez une idée ???
Bonjour j'aimerais savoir si il existe une fonction ou un moyen en C qui permet d'ouvrir tous les fichiers d'une même extension (ici les .bat) d'un même répertoire, je coince un peu là, vous avez une idée ???
Bonjour,
pas a ma connaissance, mais c'est pas bien dur a coder avec opendir, readdir, strstr et open.
il y a un exemple pour lister les fichier d un repertoire dans le faq, apres il faut juste verifier que le nom du fichier fini bien par .bat et l ouvrir.
merci pour l'info je pense avoir trouvé, je test et si il y a un problème je reviens![]()
Un problème en effet, avec readdir() j'ai réussi à obtenir la liste des fichiers du répertoire voulu mais j'ai pas réussi à faire en sorte de les ouvrir et de les afficher (leur contenu).
Il faudrait que ça affiche le contenu de tous les fichiers .txt ou .bat présent dans le répertoire où le programme est lancé...
Quelqu'un a petite idée svp ??
c'est quoi qui te pose probleme ?
si t as le nom tu dois pouvoir faire un fopen et un fread dessus ?
post ton code au pire avec les endroits ou ca coince
J'ai trouvé comment afficher le contenu de chaque fichier du répertoire voulu.
Voici une capture de ce que j'obitient :
(Cliquez dessus pour agrandir)
Voici le code :
Fonctionnement du 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 #include <stdio.h> #include <string.h> #include <dirent.h> #include <windows.h> #include <ctype.h> #define LG_MAX 36 bool retval; char chaine[LG_MAX] ; char *ptr, *ptr2, *c ; char nom_fichier; int length, i; struct dirent *lecture; FILE*fichier; DIR *dir; main() { dir = opendir("."); int i = 0; while ((lecture = readdir(dir))) { if ((ptr2 = strstr(lecture->d_name, "BAT" )) != NULL) { printf("\n"); fichier = fopen(lecture->d_name , "rb+"); while(fgets(chaine, LG_MAX, fichier) != NULL) { length = strlen(chaine); for (i=0; i<length; i++) { chaine[i] = toupper(chaine[i]); } c = "\\\\BT0D0000\\DFSSMS\\SMS_REF\\" ; ptr = strstr(chaine, c ); if (ptr != NULL ) { if (opendir(chaine) == NULL) { printf("\n -------- %s --------\n", lecture->d_name); printf("\n"); printf(" Repertoire inexistant : "); printf (" %s \n", ptr); } } } fclose(fichier); } } }
-ouverture et lecture de tous les fichiers du répertoire où ce trouve le programme.(ce sont des fichiers .bat)
-recherche des lien(s) inexistant(s).(dans les fameux .bat)
-affichage des liens morts.(précédé du nom du fichier .bat dans lequel le(s) lien(s) se trouve(nt).
Mon problème:
J'aimerais que cela m'affiche une seule fois le nom du fichier(.bat) et pas pour chacuns des liens inexistants..
exemple(avec la capture d'écran):
----- NOM DE FICHIER.BAT -----
affichage des tous les liens morts de NOM DE FICHIER.BAT
----- NOUVEAU NOM DE FICHIER.BAT -----
affichage des tous les liens morts de NOUVEAU NOM DE FICHIER.BAT
Voilà j'espère avoir été assez clair et précis...N'hésitez pas à demandez des précisions si besoin..
Le programme touche à sa fin,
Merci d'avance.
- primo, quand on fait un opendir, il faut faire un closedir quand on en a fini avec
- secondo, les readdir sortent toujours . et ..
Codage défectueux...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 -------------- Build: Debug in hello --------------- Compiling: main.c C:\dev\hello\main.c:8: error: syntax error before "retval" C:\dev\hello\main.c:8: warning: type defaults to `int' in declaration of `retval' C:\dev\hello\main.c:8: warning: data definition has no type or storage class C:\dev\hello\main.c:20: warning: return type defaults to `int' C:\dev\hello\main.c:20: warning: function declaration isn't a prototype C:\dev\hello\main.c: In function `main': C:\dev\hello\main.c:37: warning: assignment discards qualifiers from pointer target type Process terminated with status 1 (0 minutes, 4 seconds) 1 errors, 5 warnings
Ce code
fonctionne chez moi :
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 #include <stdio.h> #include <string.h> #include <dirent.h> #include <ctype.h> int main (void) { DIR *dir = opendir ("."); if (dir != NULL) { struct dirent *lecture; while ((lecture = readdir (dir)) != NULL) { char *ptr2 = strstr (lecture->d_name, ".c"); if (ptr2 != NULL) { FILE *fichier = fopen (lecture->d_name, "rb+"); printf ("\n"); if (fichier != NULL) { char chaine[36]; while (fgets (chaine, sizeof chaine, fichier) != NULL) { int const length = strlen (chaine); int i; for (i = 0; i < length; i++) { chaine[i] = tolower (chaine[i]); } { char const *c = "main"; char *ptr = strstr (chaine, c); if (ptr != NULL) { DIR *dir2 = opendir (chaine); if (dir2 == NULL) { printf ("\n -------- %s --------\n" "\n Fichier : %s \n", lecture->d_name, ptr); } else { closedir (dir2); } } } } fclose (fichier); } } } closedir (dir); } return 0; }
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 -------- hello.cbp -------- Fichier : main.c"> -------- main.c -------- Fichier : main (void) -------- main.c -------- Fichier : main"; -------- main.cmt -------- Fichier : main(int argc, char *argv[]) -------- main.c~ -------- Fichier : main (void) -------- main.c~ -------- Fichier : main"; Process returned 0 (0x0) execution time : 0.134 s Press any key to continue.
en effet ça marche chez toi mais le problème n'est pas résolu..
d'après tes résultats d'éxécutions :
Ce que je recherche à obtenir :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 -------- main.c -------- Fichier : main (void) -------- main.c -------- Fichier : main";
Merci pour l'optimisation de mon code en tout cas
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 -------- main.c -------- Fichier : main (void) Fichier : main";![]()
Je pense que c'est plus complexe que ça à cause des différents pointeurs et variables que j'utilise, d'où mes difficultés à finir ce programme...Il faut re-séparer les printf() et mettre le premier printf() au bon endroit dans la boucle![]()
Partager