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 :
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; 
}
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
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; 
}
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.

Comment s'y prendre?

Merci d'avance