PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → fListeFichier: récursif selon un nombre de répertoires enfants
fListeFichier: récursif selon un nombre de répertoires enfants
Iniciado por Nicolas ROBIN, 27,ago. 2019 11:59 - 2 respuestas
Miembro registrado
87 mensajes
Publicado el 27,agosto 2019 - 11:59
Bonjour,

Connaissez-vous une façon de faire qui permettrait de lister les fichiers d'un répertoire et ses sous répertoires mais en spécifiant une limite de nombre de sous répertoires dans lesquels rechercher.

//Dans ce cas, il manquerait la possibilité de saisir le niveau de répertoires enfants à scruter.
fListeFichier("C:\MesDocuments\*.BMP", frRécursif + frInterruptible)


Utiliser fListeFichier avec le paramètre frRecursif est efficace mais très gourmand en ressources inutiles lorsque l'on a beaucoup de sous-répertoires à scruter bien qu'ils ne nous sont pas utiles.


Exemple:

niveauRepEnfant=2

REP 1 (Niveau 0 - PARENT)
REP 1.1 (Niveau 1)
REP 1.2 (Niveau 1)
REP 1.3 (Niveau 1)
REP 1.3.1 (Niveau 2)
REP 1.3.2 (Niveau 2)
REP 1.3.3 (Niveau 2)
REP 1.3.3.1 (Niveau 3)
REP 1.3.3.2 (Niveau 3)
REP 1.3.3.3 (Niveau 3)
REP 1.3.3.3.1 (Niveau 4)
REP 1.3.3.3.2 (Niveau 4)
REP 1.3.3.3.3 (Niveau 4)

Dans ce cas, le but serait de ne pas scruter les répertoires enfants de niveau 3 et supérieurs.


--

NR
Miembro registrado
11 mensajes
Publicado el 27,agosto 2019 - 15:06
Bonjour,

il me semble que tu as une version de flisterepertoire avec l appel d une procédure a laquelle tu passes un pointeur .

Apres une variable(pointeur) pour la profondeur en cours pourrait le faire non?

si profondeur>2 alors renvoyer faux (dans ta profondeur)?
Mensaje modificado, 27,agosto 2019 - 15:13
Miembro registrado
7 mensajes
Publicado el 27,agosto 2019 - 15:30
Bonjour Nicolas,

Une possibilité parmi d'autres est de gérer la récursivité vous-même avec une fonction

Voici un exemple que vous pouvez adapter à vos besoins :

Procedure ListeFichiers(Fichier est une chaîne,Recursif est un entier) : chaîne

ChaineRetour est une chaîne = fListeFichier(Fichier,frNonRécursif)

// On récupère le paramètre Fichier en Repertoire et Fichier
NomRepertoire est une chaîne = Gauche(Fichier,Position(Fichier,"\",Taille(Fichier),DepuisFin)-1)
NomFichier est une chaîne = Droite(Fichier,Taille(Fichier)-Position(Fichier,"\",Taille(Fichier),DepuisFin))

// Si le niveau spécifié de sous-répertoires est atteint on n'exécute pas cette partie
SI Recursif > 0 ALORS
// On liste les répertoires du dossier
ListeRepertoires est une chaîne = fListeRépertoire(NomRepertoire,frNonRécursif)
// Pour chaque sous-répertoire on récupère les fichiers trouvés
POUR TOUTE chaîne Repertoire de ListeRepertoires SEPAREE PAR RC
ChaineRetour += [RC] + ListeFichiers(Repertoire+"\"+NomFichier,Recursif-1)
FIN
FIN

RENVOYER ChaineRetour


Ensuite vous n'avez plus qu'à l'appeler de cette manière :

ListeFichiers("C:\MesDocuments\*.BMP",3)


SJ