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
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; }
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager