D'accord, je ne savais pas pour les exit().
J'ai pas mal avancé et obtenu plus ou moins ce que je voulais, voici la fonction récursive :
Dans ce code, je liste tous mes fichiers, ligne par ligne, avec leur chemin absolu.
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 //fonction permettant de lister tous les fichiers dans leurs répertoires void recursively_list_files(FILE* fichier, char * dir) { HANDLE hFind3; WIN32_FIND_DATA fd; char path[MAX_PATH + 1]; sprintf(path, "%s\\*", dir); if ((hFind3 = FindFirstFile(path, &fd)) == INVALID_HANDLE_VALUE) { fprintf(fichier, "Erreur FindFirstFIle sur %s\n", path); exit(1); } while(1) { if ((strcmp(".", fd.cFileName) !=0) && (strcmp("..", fd.cFileName) != 0)) { if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { /* c'est un dossier */ sprintf(path, "%s\\%s", dir, fd.cFileName); recursively_list_files(fichier, path); } else { /* c'est un fichier */ //Création d'une nouvelle variable contenant le chemin absolu du fichier sprintf(bufferCheminFichier, dir); //on mets le chemin absolu du dossier dans la nouvelle variable strcat(bufferCheminFichier, "\\"); //on ajoute un \ entre le dossier et le fichier strcat(bufferCheminFichier, fd.cFileName); //on ajoute le nom du fichier //On mets tous les chemins abolu des fichiers dans le fichier "donnees.txt" fprintf(fichier, "%s\n", bufferCheminFichier); } } if (!FindNextFile(hFind3, &fd)) break; } if (GetLastError() != ERROR_NO_MORE_FILES) { printf("Erreur FindNextFile - dans %s\n", path); fprintf(fichier, "Erreur FindNextFile - dans %s\n", path); exit(1); } if (FindClose(hFind3) == FALSE) { fprintf(fichier, "Erreur FindClose\n"); exit(1); } }
J'ai créé une autre fonction, qui doit me permettre de lire chaque fichier, et de ne sélectionner que ce que je veux ... Voici le code :
Cette fonction s’exécute après la fonction récursive :
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 //Analayse du fichier int AnalyseFichier() { FILE* fichier2 = NULL; char buf[255]; fichier2 =fopen("C:\\Users\\cTelnaz\\Documents\\Visual Studio 2010\\Projects\\Projet-c\\Projet-c\\donnees.txt","r"); if (fichier2 == NULL) { MessageBox(NULL, "Le fichier n'a pas pu être ouvert", "Erreur", MB_ICONWARNING | MB_OK); exit(1); } else { do { //Recherche des lignes du fichier if (fgets(buf, sizeof buf, fichier2) != NULL) { //ouverture du fichier correspondant à la ligne trouvée fichier2 = fopen(buf,"r"); if (strstr(buf, "<A>")) { do { //suppresion du code } while (strstr(buf, "</A>")); } } else { MessageBox(NULL, "Plus de lignes à lire", "Stop", MB_ICONWARNING | MB_OK); } } while (buf != 0); fclose(fichier2); } }
J'ai premièrement écris la condition : Si la ligne comprends <A>, alors supprimer le code, tant que la prochaine ligne ne contient pas </A>.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 if (hEditJ !=0 && hEditI !=0) { FILE* fichier; fichier=fopen("donnees.txt", "w+"); recursively_list_files(fichier, bufferCheminSousDossier); AnalyseFichier() ; fclose(fichier); }
Ensuite, pour la suppression, j'ai fais quelques recherches mais j'ai du mal à voir comment faire ... Après cela, ce sera la fin !
Partager