Dir récursif multi-filtres en une seule passe [module / module de classe]

Soyez le premier à donner votre avis sur cette source.

Vue 7 568 fois - Téléchargée 789 fois


Description

Pour un autre projet j'avais besoin de faire un DIR récursif sans passer par l'horrible FSO.
puis de fil en aiguille, le résultat est plutôt pas mal concernant les arguments à passer

ici le but est uniquement de pouvoir faire un dir sur un dossier selon un ou plusieurs filtres (*.txt, *.bmp) simultanément, en incluant ou non les sous-répertoires, retourner les fichiers et/ou les répertoires
pas un concours de vitesse ou autre...

il existe bien d'autres sources, mais apparemment aucune cumulant ces avantages.
cependant si vous avez des idées d'améliorations ;)

le code principal est donc dans la classe.
mais comme je lis souvent "ouai mais j'arrive pas à l'intégrer....", le code est aussi fourni sous forme de module standard (2 projets 'exemple' distincts)

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
3
Date d'inscription
jeudi 31 janvier 2008
Statut
Membre
Dernière intervention
12 décembre 2013

Cela date un peu, mais tout à fait ce que je cherchais, cependant en version unicode il me retourne un caractère en moins en fin de fichier. En traçant le programme, je crois que la fonction TrimRNullW enlève un vbNull de trop à droite, et devrait s'écrire TrimRNullW = Left$(sString, InStr(sString, vbNullChar & vbNullChar))
Du coup certains tests sont faux dans DirPlusW, car ils ajoutaient le vbNull enlevé selon qu'il s'agissait d'un répertoire ou fichier...
.FileOrFolder = .FileOrFolder & vbNullChar & "" & vbNullChar
et plus loin
sTempPath = sTempPath & vbNullChar & "" & vbNullChar
Les deux tests deviennent ainsi inutiles, il suffit de ne laisser qu'une ligne et d'enlever le vbNullChar avant le "" pour avoir :
If (tWFD.dwFileAttributes And FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY Then
' c'est un dossier
.FileOrFolder = .FileOrFolder & "" & vbNullChar
.IsDirectory = True
End If

et plus loin

If (tWFD.dwFileAttributes And FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY Then
' extraction nom dossier en évitant les "." et ".."
sTempPath = TrimRNullW(tWFD.cFileName)
If IsValidDirPlusW(sTempPath) Then
' récursivité, mais on peut très bien avoir un dossier vide
sTempPath = sTempPath & "" & vbNullChar

Et pour IsValidDirPlusW il faudrait plutôt écrire :
IsValidDirPlusW = ((sString <> StrConv(".", vbUnicode))) And (sString <> StrConv("..", vbUnicode))
(enfin, en utilisant des constantes ce serait mieux pour éviter les appels de StrConv à chaque fois)

En faisant cela, tout rentre dans l'ordre et unicode ou pas la classe marche à merveille (je n'ai pas testé le module).
Sans quoi je trouve le code très utile car il permet de se passer des composants.
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
35
FM20.dll (composants Form2.0) permet d'afficher les caractères unicode

aucun intérêt d'utiliser une DirListBox puisque le but est de ne pas passer par des composants

aucun intérêt d'utiliser le DIR classique puisqu'il ne traite pas l'unicode

aucun intérêt de tester la rapidité d'une boucle sans filtre puisque ce n'est pas le but de la source.

donc rien de constructif, fausses infos, faux tests.

tu vois, même en te laissant un droit de réponse (et donc de rester), tu ne sais pas en profiter utilement FMAPI....
tanpis, y'a des cas comme çà où la raison ne l'emportera jamais
Messages postés
59
Date d'inscription
vendredi 18 juillet 2008
Statut
Membre
Dernière intervention
31 mars 2011

Non, la dll manquante est FM20.dll ... pas FMAPI.dll!
Cà existe cette dll ?
Et je ne vois pas ce que ce BOUC EMISSAIRE vient faire ici!
Bon!
Pour accélérer ta recherche, tu crées une classe de recherche avec 1 seul paramétrage possible, tu ouvres sur ta feuille une Collection, et tu lances ta collection de recherche. C'est très rapide!
Dans la classe, tu place une routine récursive SIMPLE avec le DIR classique, planifié avec une DirListBox.

Rapidité : 5 secondes pour trouver 10000 fichiers d'un disque dur de 1/2 To via USB2.0.
Avec SATI ... je pense, moins d'une seconde.

A toi de voir : Beau ou efficace, à toi de voir
Messages postés
181
Date d'inscription
jeudi 30 mai 2002
Statut
Membre
Dernière intervention
19 août 2012

Bah! Pour le skin, on aime ou pas, on retient ou non quelques lignes de prog. De toute façon, elle est indépendante de la fonction concernée.
Perso, ce skin est un petit 'plus'.

VBtoTRASH : Pour quelqu'un qui vient de s'inscrire aujourd'hui même, tu n'es pas très constructif dans tes propos. Tu me laisses sur ma faim car tu n'as pas donné de solution (constructive).
Au fait, n'oublie pas qu'ici, on parle de VB.
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
35
titicar -> merci pour ton comm. je vais tout de même revoir le code (un peu plus tard) pour qu'il soit un peu plus rapide

VBtoTRASH -> pour l'interface je me demande aussi...
pour le reste, j'vais te laisser te trouver un autre bouc émissaire FMAPI...
Afficher les 13 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.