Bonjour a vous!
Existe-t-il une fonction C qui permettent de rechercher une chaine de caracteres dans une arborescence de fichiers?
Je ne vois pas comment faire?
Si quelqu'un a une idée: JE PRENDS
Bonjour a vous!
Existe-t-il une fonction C qui permettent de rechercher une chaine de caracteres dans une arborescence de fichiers?
Je ne vois pas comment faire?
Si quelqu'un a une idée: JE PRENDS
Je ne sais pas si ce forum est mort mais j'aimerais en fait juste savoir si il existe une fonction en C qui permette de faire un peu comme un grep
Merci d'avance
Une fonction C, je ne sais pas... mais il est possible de tout faire, alors...Envoyé par fantomchris
![]()
Peux-tu préciser ce que tu veux faire ?
S'agit-il de chercher une chaîne de caractères dans le contenu des fichiers, dans une arborescence ?
Ou bien s'agit-il de chercher une chaîne de caractères dans les noms des fichiers et répertoires d'une arborescence ?
Bonjour, si je ne me trompe pas il s'agit plutot de rechercher dans le contenu des fichiers, présents dans l'arborescence
Et la je suis bloqué, mais je cherche
Alors dans ce cas, je ne crains qu'il y ait d'autre manière que de passer par une exploration de l'arborescence, à coup de opendir/readdir/closedir, suivie pour chaque fichier trouvé d'une recherche à coup de fopen/(fread ou fget)/fclose et de strstr sur chaque contenu...Envoyé par fantomchris
J'étais en train d'explorer cette possiblité avec une fonction de parcours en récursif mais existe t il sur le site des explications valables sur l'utilisation de ces fonctions??
J'ai aussi regardé la fonction scandir mais elle me semble un peu compliquer a mettre en oeuvre!
Quelqu'un a t il une idée pour effectuer cette recherche??
Comme d'hab, il faut regarder la FAQ
"La haine seule fait des choix" - Koan Zen
"Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
"Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
Faites du Prolog, ça vous changera les idées !
Ma page Prolog
Mes codes sources commentés
Mon avatar : La Madeleine à la veilleuse de Georges de La Tour
En ce qui concerne la fonction opendir, une question me taraude:
Est on obligé de lui passer un chemin depuis la racine ou peut on lui passer un chemin relatif?
Merci d'avance
Bon j'ai trouvé la reponse seul: il lui faut le chemin depuis la racine
Par contre je ne vois pas comment arriver a faire la distinction entre un fichier et un dossier.
Merci d'avance
Pas forcément. Tu peux passer '.' qui est le répertoire courant.Envoyé par fantomchris
J'utilise une méthode barbare qui consiste à faire un fopen(). Si ça s'ouvre bien c'est un fichier accessible, sinon, c'est autre chose, et on ignore...Par contre je ne vois pas comment arriver a faire la distinction entre un fichier et un dossier.
Il doit y avoir aussi un moyen de "bricoler" quelquechose avec les fonctions stat/fstat/lstat.Envoyé par Emmanuel Delahaye
Ceci dit, si c'est peut-être moins barbare, est-ce plus portable ?
Bon, beh apres pas mal de recherche, voici le code que j'ai fait et qui marche nikel, si vous voulez le publier, je dis oui:
Voila, je n'ai pas inclus les librairies, j'espere que ca aidera ceux qui en ont besoin! Ca fonctionne sous linux! Le reste je n'en sais rien
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 int recherche_chaine (char * fichier,char * chaine) { FILE * fic; char * buffer; if ( fic=fopen(fichier,"rt") ) { buffer=(char*)malloc(BUFF_SIZE*sizeof(char)); while (fgets(buffer,BUFF_SIZE,fic)!=NULL) { if ( strstr(buffer,chaine) != NULL ) return 0; } fclose(fic); } return 1; } int parcours_recursif (char * racine,char * chaine_a_chercher) { struct dirent *lecture; DIR *rep; char temp [512]; if ((rep = opendir(racine))==NULL) return 1; while ((lecture = readdir(rep))) { if(strcmp(lecture->d_name,".")!=0 && strcmp(lecture->d_name,"..")!=0 ) { strcpy(temp,racine); strcat(temp,"/"); strcat(temp,lecture->d_name); if ( (parcours_recursif(temp,chaine_a_chercher)) ) { if ( !recherche_chaine(temp,chaine_a_chercher) ) printf("Le fichier %s contient la chaine %s\n",temp,chaine_a_chercher); } } } closedir(rep); return 0; }
Partager