Dir: filtrage bizarre ??

Résolu
umfred Messages postés 18 Date d'inscription jeudi 20 février 2003 Statut Membre Dernière intervention 19 juin 2017 - 11 janv. 2010 à 10:44
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 - 14 janv. 2010 à 22:55
Bonjour,
Je souhaitais utiliser la fonction dir pour effectuer une opération classique de recherche de nom de fichiers, mais je suis tombé sur un filtrage bizarre des données.

Dans un dossier, j'ai les fichiers suivants
abcde_12345678.txt
abcde_20090901_135234.txt
abcde_20090902_085457.txt
abcde_20090904_084035.txt
abcde_20090907_090546.txt
abcde_20090907_132107.txt
abcde_20090908_115742.txt

L'opération que je veux faire c'est récupérer les fichiers de format "abcde_????????.txt" (soit dans notre cas, uniquement le fichier "abcde_12345678.txt"). Hors, en effectuant un "dir abcde_????????.txt" dans une fenêtre de commande DOS, la commande me sort les fichiers:
abcde_12345678.txt
abcde_20090908_115742.txt
abcde_20090901_135234.txt
abcde_20090902_085457.txt
De même, j'ai effectué le test suivant sous vb6:
Private Sub Form_Load()
a = Dir("C:\Mon_chemin\abcde_????????.txt")
While a <> ""
    Debug.Print a
    a = Dir
Wend
Debug.Print a
End Sub

ce code me donne le même résultat que la commande dir (ce qui me semble normal, même si le résultat m'étonne)

Après plusieurs tests, je me suis rendu compte qu'il semblerai que les noms courts des fichiers soient utilisés pour donner le résultat, car la commande m'affiche seulement les fichiers dont le nom court commence effectivement par "abcde".
ABCDE_~2.TXT abcde_12345678.txt
ABCDE_~3.TXT abcde_20090901_135234.txt
ABCDE_~4.TXT abcde_20090902_085457.txt
AB1CEC~1.TXT abcde_20090904_084035.txt
AB0B37~1.TXT abcde_20090907_090546.txt
AB01B6~1.TXT abcde_20090907_132107.txt
ABCDE_~1.TXT abcde_20090908_115742.txt

Quelqu'un aurai-t-il une idée de ce qu'il se passe, et comment faire pour que le filtre comme attendu ?

merci d'avance

9 réponses

PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
11 janv. 2010 à 11:43
salut,

je reproduis ton problème, bizarre oui...
et par API certains chemins me sont retournés sans underscore...

NB : attention à ton dernier debug.print a en sortie

bref pour palier au problème je ne vois que LIKE ...

Private Sub Form_Load()
    Dim a As String
    a = Dir("C:\Mon_chemin\*.txt")
    While a <> ""
        If a Like "abcde_????????.txt" Then Debug.Print a
        a = Dir
    Wend
End Sub


le mystère reste entier

++
[hr]
3
cs_loulou69 Messages postés 672 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 2 juin 2016 1
11 janv. 2010 à 11:47
Bonjour

Moi aussi j'ai observé avant les fetes un effet de bord mais je vais avoir du mal à le reproduire.

Dans ton cas ce Ya t'il eu un changement d'OS Poste ou Serveur?

Cependant j'observe que la commande Dir du DOS a un paramétre nouveau sous Windows XP SP2

Dir /X Affiche les noms corts générs pour les noms de fichiers non 8.3. Ce format est celui de /N avec le nom court inséré avant le nom long. S'il n'y a pas de noms court, des espaces seront affichés à la place

Doit on utiliser des masques le plus courts possible 8.3 dans la commande Dir de VB, doit on changer de dossier avant?
0
umfred Messages postés 18 Date d'inscription jeudi 20 février 2003 Statut Membre Dernière intervention 19 juin 2017
11 janv. 2010 à 13:29
merci de vos réponses

@PCPT:
le dernier debug.print n'a en effet pas d'utilité (juste à afficher le cas a="" en fait), c'était juste pour la forme.
Sinon entre temps, j'avais pensé à effectuer un test sur la longueur de la chaine.

@loulou69:
c'est en effet grace à "dir /x abcde_*.txt" que j'ai eu les noms courts et que j'en ai déduis mon hypothèse.
Pour info je suis sous windows XP SP3 et je ne peux pas dire si ça se produisait avant, je n'ai fait que l'essai ce matin, c'était pour vérifier une hypothèse pour faire une éventuelle modif d'un soft.


Si d'autres ont une idée du pourquoi du comment, ou d'autres astuces pour passer outre cette étrangeté, je suis preneur
0
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
11 janv. 2010 à 13:42
Bonjour,

Je ne sais si cela pourra t'aider, mais il existe une API nommée GetLongPathName() pour convertir ces fameux noms DOS en noms longs.


Calade
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
11 janv. 2010 à 19:05
Bonsoir,

En réalité dès qu'on a au moins 2 points d'interrogation suivi du point, cela se comporte comme une étoile.

Dir C:\abcde_??.txt => Dir C:\abcde_*.txt
Dir C:\abcde_???.txt => Dir C:\abcde_*.txt

etc... en revanche :

Dir C:\abcde_??.txt => filtre ok
Dir C:\abcde_?????_*.txt => filtre ok
Dir C:\abcde_????????_*.txt => filtre ok

et donc ce dernier vaut :
Dir C:\abcde_????????_??.txt

Amicalement,
Us.
0
umfred Messages postés 18 Date d'inscription jeudi 20 février 2003 Statut Membre Dernière intervention 19 juin 2017
14 janv. 2010 à 12:05
@us_30:
en fait, ça ne se comporte pas vraiment comme une étoile, je dirais plutôt comme une étoile sur les noms courts.

En effet, si tu reprends mon post initial, quand je fais un "dir abcde_*.txt", j'ai l'ensemble des 7 fichiers (normal).
Si je fait un "dir abcde_????????.txt" (ou un "dir abcde_??.txt"), je n'ai que 4 fichiers sur 7, ceux dont les noms courts commencent effectivement par "abcde_".


Je viens de faire un essai en ajoutant une 6ème lettre au nom de base ("abcde" devient "abcdef"), et là je retrouve un fonctionnement normal, aussi bien sous DOS que dans VB, c'est-à-dire que un "dir abcdef_????????.txt" me donne uniquement le fichier "abcdef_12345678.txt"
Il semblerait donc qu'il y a un "effet de bord" quand un fichier contient 5 caratères avant un underscore dans un nom de fichier.
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
14 janv. 2010 à 22:40
okay... filtrage bien bizarre de toute façon. La solution de PCPT reste une bonne alternative. Peut-être à faire dans un snippet... enfin c'est juste une suggestion...

Amicalement,
Us.
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
14 janv. 2010 à 22:47
bohh, pas pour un malheureux LIKE quand même...
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
14 janv. 2010 à 22:55
Ah, oui mais non !

Il y a déjà qlq fonctions de listage de fichier en snippet... et d'une!
Ensuite, et surtout... ce malheureux LIKE supprime cet fameux bizaroïde filtrage relevé par "fredx"... D'où l'intérêt...

... ensuite, cela reste qu'une suggestion, qui devra être validé par un administrateur, de toute façon...

Amicalement,
Us.
0
Rejoignez-nous