Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Recherche Fichier(s) dans Disque/Répertoire/Sous-repertoire ...ultra rapide ... sous DOS ! [ Système / Fichier & Disque ] (Christ_OFF)

vendredi 11 avril 2008 à 01:25:11 | Recherche Fichier(s) dans Disque/Répertoire/Sous-repertoire ...ultra rapide ... sous DOS !

Christ_OFF

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


vendredi 11 avril 2008 à 05:43:20 | Re : Recherche Fichier(s) dans Disque/Répertoire/Sous-repertoire ...ultra rapide ... sous DOS !

radcur



salut

même si FSO est plus moderne, il se traine les pieds.  C'est très lent à utiliser...

il doit exister des sources sur le site pour la recherche de fichiers et qui utilise la récursivité et qui doit être plus performant que FSO  avec un temps réponse plus près de DOS mais plus moderne que DOS.



vendredi 11 avril 2008 à 11:32:42 | Re : Recherche Fichier(s) dans Disque/Répertoire/Sous-repertoire ...ultra rapide ... sous DOS !

NHenry

Membre Club
Bonjour

Tu peux voir su www.codyx.org, il y a 2/3 snippets qui en parle.
Et c'est vrai, évite FSO en VB6, il y a la commande Dir$(...), mais je ne sais pas si c'est la meilleur solution.

Le fer à souder a besoin d'une panne pour fonctionner.
VB (6, .NET1&2), C++, C#.Net1
Mon site

vendredi 11 avril 2008 à 18:49:05 | Re : Recherche Fichier(s) dans Disque/Répertoire/Sous-repertoire ...ultra rapide ... sous DOS !

Christ_OFF

Bonjour,

Attention, sauf erreur, la commande DIR$( ) ne scanne pas dans les sous-répertoires contrairement au DIR du DOS.
Rappel :
DIR C:\*.exe /s /b >ListFich.txt
écrit dans le fichier ListFich.txt, la liste de tous les emplacements des fichiers *.EXE présents dans les répertoires et sous-répertoires de C:\.

exemple de résultat dans ListFich.txt
C:\toto.exe
C:\Program Files\Adobe\AcroRd32.exe
C:\Program Files\Asus\AsusProb.exe
...
C:\Windows\notepad.exe
C:\Windows\calc.exe

...
(A noter que l'option ShellAndWait (décrite ci-dessus) n'est pas obligatoire.
Elle est est utile seulement si, par exemple, on veut détruire le fichier après lecture du
résultat et que le Shell a été moins rapide que le VB)

Je pense que la commande DIR du DOS ne lit que la FAT qui est déjà un listing, et donc très facile à filtrer une recherche.
Contrairement à tout ce que j'ai pu trouvé sur le net, où on effectue une recherche récursive, de répertoire en répertoire,
et forcément beaucoup plus lente quelquesoit le procédé utilisé (FSO ou autre).

Ch.


lundi 14 avril 2008 à 08:44:58 | Re : Recherche Fichier(s) dans Disque/Répertoire/Sous-repertoire ...ultra rapide ... sous DOS !

NHenry

Membre Club
Bonjour

Connaissait pas ces commutateurs de la commande Dir, merci, ce me sera peut être utile plus tard.

Le fer à souder a besoin d'une panne pour fonctionner.
VB (6, .NET1&2), C++, C#.Net1
Mon site



Cette discussion est classé dans : fin, commande, dos, byval, wshtemp


Répondre à ce message

Sujets en rapport avec ce message

FIn d'un processus [ par crn_c21 ] J'utilise la commande shell pour éxécuter une commande DOS dans un programme (sous VB6).Je voudrais stopper l'execution du code tant que la commande D Executer une commande DOs dans un fichier VBS [ par WaReZ_CarTmaN ] Salut @ tous. Je souhaiterais executer une commande DOS de type NET SEND dans un fichier .VBS. J'arrive à executer un fichier comme ceci : Set shell fin d'un algo [ par esus1985 ] bonjour bon voila alros mon probleme j'ai un algo qui a ététrtaduit en fortran ( pas par mes soins) et qui fonctionne tres bien... jusque la rien d'an commande ms_dos [ par 974 moin le la ] je cherche la commande ms_dos pour installer xp pro car il ne démare pas automatiquement commande DOS incomprise [ par morphatrix ] slt a tous, je suis débutant dans le domaine de visual basic, g vu il y a pas logtemps qu'il était possible d'executer des commande dos avec VB seulem commande DOS incomprise [ par morphatrix ] slt a tous, je suis débutant dans le domaine de visual basic, g vu il y a pas logtemps qu'il était possible d'executer des commande dos avec VB seulem Lancer une commande DOS en VBS [ par ITALIA ] Comment lancer une commande DOS du type START RUN AS en VBS ?MerciIt@li@ Envoi d'une commande dos dans un programme déjà ouvert [ par Nicoxs ] Bonjour à tous.Je travaille actuellement sur un projet dans lequel j'ai besoin de lancer une application tournant dans une fenêtre DOS. (Du style cmd. Attendre fin execution d'un programme DOS [ par lamquin ] Bonjour,Je voudrais savoir comment ma macro peut détecter la fin d'éxécution d'un programme externe .exe?je lance cet .exe depuis ma macro par la comm Variable VB dans commande DOS [ par drouault ] Bonjour à tous; Voici le souci : j'éxécute à partir de VB6 une commande dos qui me permet de lancer une requête qui exporte des données au format exce


Nos sponsors

Sondage...

CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,187 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.