Liste récursive des fichiers contenue dans un dossier

Résolu/Fermé
Utilisateur anonyme - Modifié par astrocurieux le 22/06/2016 à 12:24
 Utilisateur anonyme - 29 juil. 2016 à 09:37
Bonjour,

quelque'un pourrais me dire comment faire pour lister récursivement l’intégralité des fichier contenue dans un dépôt ou dossier ?
mon programme me permet déjà :
- de lister tout les fichiers d'un dossier
- de faire la différence entre fichier et dossier
- écrire la liste des fichiers dans un LOG.txt dans le dossier concerner.

mais a partir de la c'est la galère.
voici un schéma pour m'illustrer :

Depot
|
|-fichier1
|-fichier2
|-fichier3
|---dossierA
|---|
|---|- fichierA1
|---|- fichierA2
|---|- fichierA3
|---|---dossierAA
|---|---|
|---|---|-fichierAA1
|---|---|-fichierAA2
|---|---|-fichierAA3
|---|---|----------------------------LOG.TXT n°1 (contient tout les fichiers AA)
|---|
|---|- fichierA4
|---|--------------------------------LOG.TXT n°2 (contient tout les fichiers A)
|
|---dossierB
|---|
|---|-fichierB1
|---|-fichierB2
|---|---dossierBA
|---|---|
|---|---|-fichierBA1
|---|---|--------------------------LOG.TXT n°3 (contient le fichier BA1)
|---|
|---|------------------------------LOG.TXT n°4 (contient tout les fichiers B)
|
|-fichier4
|-fichier5
|----------------------------------LOG.TXT n°5 (contient tout les fichiers de Depot)


quand je dit "contient tout les fichier" c'est uniquement leur nom.
Imaginons que chaque fichier et trié par ordre alphabétique.
lors du lancement de l'executable mon programme commence a lister le contenue du dernier dossier trouvé soit le "dossierBA" puis liste "dossierB" puis "dossierAA" puis "dossierA" pour finir avec "Depot"

Seul les LOG.TXT n°3 et 4 fonctionne car ce sont les premiers traité et que "dossierB" ne contient pas de fichier apres le "dossierBA" autrement sa aurais planter.

le problème est :
quand je demande a opendir() d’ouvrir "dossierAA" il est impossible que a la fin de ce dernier, je lui redonne l'ordre d’ouvrir le "dossierA" car ce dernier a déjà commencer a être lister mais n'a pas pue être fini car "dossierAA" a était trouvé avant que tout les fichier de "dossierA" ne soit fini d’être lister, en effet "fichierA4" est absent .

je ne fournie pas de code car cela ne servirais a rien ici.
je voudrais justement le remplacer.
avez vous une idée pour crée tout les LOG.TXT en récursif ?

merci de m'avoir lue jusqu'au bout j’espère avoir était claire .
a bientôt je l’espère

A voir également:

1 réponse

hopelan Messages postés 95 Date d'inscription dimanche 12 juin 2016 Statut Membre Dernière intervention 16 janvier 2018 17
1 juil. 2016 à 14:27
Bonjours,
Pour ton problème, je pense que tu te complique la tâche. Si tu veut seulement loguer dossier par dossier avec un log dans chaque dossier, et bien tu peut reprendre les algos du recherche de fichier.

L'idée c'est d'optimiser les ressources avec du multithreading.

=> Tu crée une fonction "BrowseFolder(std::string& path)" qui parcourt le dossier renseigné en chemin, crée un fichier log.txt et y inscrit l'ensemble des fichiers et dossiers trouvés (via d'autres fonction éventuellement pour alléger le code)

=> Ensuite, si cette fonction trouve un dossier, elle démarre un nouveau thread dans lequel elle s’appelle avec en paramètre le chemin de ce dossier. Elle continue ensuite sa boucle sur les fichiers jusqu’à qu'il ne reste aucun fichiers ou dossier. Une fois qu'elle termine, le thread dépile et se ferme jusqu’à ce qu'il ne reste plus que le thread principal. Et la tu fait ce que tu veut pour la fin du programme.

(bien sur le multitread est facultatif, la fonction peut très bien s'appeler elle même sans nouveau thread mais c'est moins rapide bien que ce soit moins énergivore.)
0
ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 225
1 juil. 2016 à 14:46
BrowseFolder(std::string& path)

BrowseFolder(const std::string& path)
plutôt.
0
Utilisateur anonyme
29 juil. 2016 à 09:37
Bonjour,

je suis desolé de mon temps de reaction pour vous repondre.
je n'avait pas pensé au tread, c'est une bonne idée que je garde en téte.

mon algo fonctionne deja sur la base du recurcif, mais comporte quelque bug que je doit encore résoudre .

je reviendrais vers vous quand j'aurais de nouveau ce programme en téte.
0