umfred
Messages postés18Date d'inscriptionjeudi 20 février 2003StatutMembreDernière intervention19 juin 2017
-
11 janv. 2010 à 10:44
us_30
Messages postés2065Date d'inscriptionlundi 11 avril 2005StatutMembreDernière intervention14 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 ?
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 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
cs_loulou69
Messages postés672Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention 2 juin 20161 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?
umfred
Messages postés18Date d'inscriptionjeudi 20 février 2003StatutMembreDernière intervention19 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
umfred
Messages postés18Date d'inscriptionjeudi 20 février 2003StatutMembreDernière intervention19 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.
us_30
Messages postés2065Date d'inscriptionlundi 11 avril 2005StatutMembreDernière intervention14 mars 201610 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...
us_30
Messages postés2065Date d'inscriptionlundi 11 avril 2005StatutMembreDernière intervention14 mars 201610 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...