Bonjour,
A vrai dire ce n'est pas une question mais une interrogation.
Mon but : Rechercher tous les fichiers "Thumbs.db" sur un Disque ou un Repertoire(+sous-repertoires) et lister leur emplacement dans un fichier.
J'avais déjà fait un fait un tel programme en TurboBasic (il y a très longtemps) et j'avais opté pour une commande DOS (c'est tout ce que j'avais à l'époque) du style "DIR C:\ Thumbs.db /s /b >FicTemp.txt"
Cette commande liste l'ensemble des "Thumbs.db" présent dans C:\ et les sous-repertoires et stocke le résultat dans "FicTemp.txt"
En voulant, le refaire sous VB6, j'ai opté pour un FSO (plus moderne), et oh stuppeur, mon traitement était 10 fois lent que ma préhistorique commnde DOS. Faites l'essai du DOS dans une fenêtre de commande, vous serez surpris de la rapidité du résultat (ce qui peut peut-être s'expliquer par le fait qu'on est plus près du langage machine que le VB)
J'ai donc transposé cette commande DOS sous VB6. Mais ceci implique de détecter la fin du traitement DOS avant de poursuivre l'éxécution du VB6.
J'ai trouvé le remède sur "http://www.codyx.org" et le résultat est incroyablement rapide et très court en ligne de programmation.
Private Sub Command1_Click()
Dim DirThumb As String 'Environ$("comspec") permet de trouver Command.exe suivant la version Windows
'/b affiche une liste sous un format abregé (juste une liste bien propre des emplacement)
'/s Scanne les sous-répertoire DirThumb = Environ$("comspec") & " /c dir C:\thumbs.db /s /b > FicTemp.txt" 'commande dos, fenêtre cachée, synchrone ShellAndWait DirThumb, WshHide, True ' OU 'commande dos, fenêtre cachée, synchrone ShellAndWaitNoRef DirThumb, 0, True
End Sub' 2 façon de tester l'exécution : AVEC ou SANS une référence à Windows Script Host Object Model (wshom.ocx)
Private Sub ShellAndWait(ByVal PathName As String, _
Optional ByVal WindowStyle As WshWindowStyle = WshMinimizedFocus, _
Optional ByVal WaitOnReturn As Boolean = False)
'nécessite une référence projet à la bibliothèque Windows Script Host Object Model (wshom.ocx)
Dim wshTemp As IWshRuntimeLibrary.IWshShell
'instancie l'objet WShell
Set wshTemp = New IWshShell_Class
'lance la commande
wshTemp.Run PathName, WindowStyle, WaitOnReturn
'affiche la boite de dialogue de fin
MsgBox "Fin"
'libère l'objet
Set wshTemp = Nothing
End Sub
OU
Private Sub ShellAndWaitNoRef(ByVal PathName As String, _
Optional ByVal WindowStyle As Integer = 2, _
Optional ByVal WaitOnReturn As Boolean = False)
'NE nécessite PAS de référence projet à la bibliothèque Windows Script Host Object Model (wshom.ocx)
Dim wshTemp As Variant
'instancie l'objet WShell
Set wshTemp = CreateObject("WScript.Shell")
'lance la commande
wshTemp.Run PathName, WindowStyle, WaitOnReturn
'affiche la boite de dialogue de fin
MsgBox "Fin"
'libère l'objet
Set wshTemp = Nothing
End Sub
J'ai donc opté pour cette version et je la publie sur ce forum pour partager cette "trouvaille" (je dois bien cela, avec tout ce que j'ai trouvé ici :-) )
Cette option de recherche de fichier n'est effectivement pas très "VB" et est peut-être faite pour des vieux comme moi

qui ont débuter avec le DOS 3.0 (en 1979!), mais au vu du résultat ultra-rapide, je ne comprends pas qu'elle soit aussi peu cité.
A moins qu'elle possède un inconvénient que je n'aurai pas détecté !
A vous de juger et de l'adopter si vous en êtes convaincu (moi c'est fait ).
Christ_OFF