Bonsoir à toutes et tous,
Je viens d'entrer en 1ère année de cycle ingénieur et déjà un exercice me tracasse et qui concerne ma hantise : le développement en C
En effet, comme l'indique le titre, je dois réinterpréter la commande "FIND" sous linux en langage C.
Le répertoire utilisé par défaut est le répertoire courant ; l'option par défaut est -print.
Et voici quelquesoptions de tests (N peut être +N ou -N ou N) :
-amin N -anewer FICHIER -atime N -cmin N
-cnewer FICHIER -ctime N -empty -false -fstype TYPE -gid N -group NOM
J'ai donc parcouru Google et les forums/communautés pour récupérer des informations jusqu'à même trouver le code source de find, mais bien sur celui ci est très complexe..
Au départ j'ai proposé ceci :
Ensuite je l'ai optimisé de cette manière:
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 #include <stdlib.h>/* pour exit()*/ #include <stdio.h>/* pour puts() */ #include <dirent.h>/* Pour l'utilisation des dossiers */ #include <errno.h> #ifndef WIN32 #include <sys/types.h> #endif int main() { DIR* rep = NULL; struct dirent* fichierLu = NULL; /* Déclaration d'un pointeur vers la structure dirent. */ rep = opendir("C:\\"); if (rep == NULL) exit(1); fichierLu = readdir(rep); /* On lit le premier répertoire du dossier. */ while ((fichierLu = readdir(rep)) != NULL) printf("Le fichier lu s'appelle '%s'\n", fichierLu->d_name); if (closedir(rep) == -1) exit(-1); return 0; }
Maintenant, c'est là que votre aide va m'être très précieuse, je désire maintenant implémenter à mon code la saisie de recherche du fichier, au moins si quelques caractères correspondent à celui qui est recherché et qu'il me liste tous les fichiers ayant les mêmes caractères plus ou moins, en parcourant les répertoires.
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
78
79
80
81
82
83
84
85
86
87
88
89
90 #include <stdlib.h> #include <stdio.h> #include <string.h> #include <dirent.h> #ifndef WIN32 #include <sys/types.h> #define CLEAR "clear" /* system("clear") pour UNIX */ #else #define CLEAR "cls" /* system("cls") pour Windows */ #endif int isDir(char* s) { if ((strchr(s, '.')) == NULL) /* Si le nom du chemin n'a pas de point (une extension). */ return 1; else return 0; } void lire(char* s) { char *enter = NULL; char temp[100] = ""; /* Chaîne de caractères temporaire contenant la saisie de l'utilisateur. */ fgets(temp, 99, stdin); enter = strchr(temp, '\n'); /* Voir le chapitre des saisies sécurisées. */ if (enter != NULL) *enter = '\0'; strcat(s, temp); /* On ajoute à la suite le nom du dossier pour obtenir quelque chose comme C:/nom/nom/ pour Win ou /nom/nom/ pour UNIX. */ } void lireDossier(char* s, DIR* rep) { struct dirent* ent = NULL; printf(" -- Lecture du dossier '%s' -- \n", s); while ((ent = readdir(rep)) != NULL) /* Lecture du dossier. */ printf("%s\n", ent->d_name); printf("\n\n -- Que voulez-vous ouvrir -- ?\n"); } void parcourirDossier(DIR* rep, char* chemin) { lire(chemin); /* Lecture du nouveau chemin; */ system(CLEAR); /* On efface l'écran. */ if (!isDir(chemin)) { printf("%s n'est pas un dossier", chemin); exit(-1); } rep = opendir(chemin); if (rep == NULL) { printf("Le dossier '%s' n'a pas pu etre ouvert", chemin); exit(-1); } lireDossier(chemin, rep); /* Lecture... */ closedir(rep); /* Fermeture du répertoire. */ parcourirDossier(rep, chemin); /* On rappelle la fonction parcourirDossier (récursivité). */ } int main() { DIR* rep = NULL; char chemin[500] = ""; parcourirDossier(rep, chemin); closedir(rep); return 0; }
Comment s'y prendre?
Merci d'avance
Partager