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
| int TaggerFichier(char* fichOUrep, char* tag) {
//on regarde si c'est est un fichier ou un répertoire
int estrep = EstUnRep(fichOUrep);
if (estrep == 0) { //c'est un fichier
//on récupère le chemin d'accès complet du fichier
char* chem = RecupChemin(fichOUrep);
//ajoute le fichier et son tag dans la base
AjouterTag(chem,tag);
nbFichTag++;
free(chem), chem = NULL;
}
else { //c'est un répertoire
char* chemincomplet = NULL;
//on met à jour le nom du dossier pour qu'il se termine bien par '/'
char* dossier = MajSlashs(fichOUrep);
//on ouvre le dossier
struct dirent *lecture;
DIR *rep;
rep = opendir(dossier);
if (rep == NULL) {
printf("\nImpossible d'ouvrir le répertoire %s\n",dossier);
}
//on récupère le chemin d'accès du dossier
char* cheminrep = RecupChemin(dossier);
//on lit chacun des fichiers contenu dans le dossier
while ((lecture = readdir(rep))) {
if (strcmp(lecture->d_name,".")!=0 && strcmp(lecture->d_name,"..")!= 0 && strcmp(lecture->d_name+strlen(lecture->d_name)-1,"~") != 0) {
//on récupère le chemin d'accès complet du fichier
chemincomplet = malloc(strlen(cheminrep)+strlen(lecture->d_name)+1);
if(chemincomplet == NULL) {
printf("\nECHEC ALLOCATION MEMOIRE !\n");
exit(1);
}
strcpy(chemincomplet,cheminrep);
strcat(chemincomplet,lecture->d_name);
//on relance la fonction pour tagger le fichier
TaggerFichier(chemincomplet,tag);
free(chemincomplet), chemincomplet = NULL;
}
}
closedir(rep);
//free(dossier);
//free(cheminrep);
}
return nbFichTag;
} |
Partager