Bonjour,
J'ai un programme C qui ajoute des fichiers dans une base.
Je voudrais ajouter le nom de fichier et son inoeud.
J'ai donc une fonction AjouterFich qui se présente à peu près comme ceci :
J'ai une autre fonction qui appelle celle-ci, dans laquelle je test si il s'agit d'un fichier ou un répertoire passé en paramètre. La détection se passe bien, et lorsque c'est un répertoire, je voudrais ajouter chacun des fichier dans la base. Ainsi, lorsqu'un répertoire est détecté, je fait ceci afin de lancer AjouterFich pour chaque fichiers :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 int AjouterFich(char *fichier) { //récupère les infos du fichier (inoeud) struct stat s; int res = stat(fichier,&s); if (res<0) { printf("stat error"); return -1; } int inoeud = s.st_ino; //... suite qui ajoute dans la base
En fait le problème c'est que lorsque je passe un fichier à ma fonction (./fonction.exe fichier), ça fonctionne très bien.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 struct dirent *lecture; DIR *rep; rep = opendir(chemin); if (rep==NULL) { printf("\nImpossible d'ouvrir le répertoire %s.\n\n",fichOUrep); exit(1); } while ((lecture = readdir(rep))) { AjouterFich(lecture->d_name); } closedir(rep);
Mais lorsque je passe un dossier (./fonction.exe Rep/), ma fonction stat me renvoi -1 pour chaque fichier, du coup l'inoeud est un chiffre bizarre qui change tout le temps et non le vrai inoeud.
Donc en lui passant directement le ficher ça fonctionne, mais en passant le fichier via lecture->d_name ça ne fonctionne plus.
Une idée?
Je vous remerci.
Partager