Lister les exe des sous répertoire rapidement.

steph94700 Messages postés 2 Date d'inscription mercredi 4 novembre 2009 Statut Membre Dernière intervention 19 mai 2010 - 19 mai 2010 à 11:15
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 - 20 mai 2010 à 12:25
Bonjour,
j'ai besoin de lister les exe des sous répertoire pour faire une appli de déploiement semi-automatique. Mais je rencontre un problème de rapidité d'exécution. J'ai essayé d'optimiser le code, et j'ai diminué par deux le temps d'exécution mais c'est pas suffisant. Est ce que qq'un peu me donner un coup de main?
Voici le code :
'******************************************Lister Sous Repertoire***********************************

Public Sub ListerSousRepertoire(ByVal NomRepertoire As String, ByRef Fso)

Dim SubFol, Fi, Fol, Fi2
Dim SubFol1, Fi1, Fol1

'Récupère le répertoire
Set Fol = Fso.GetFolder(NomRepertoire)

'Pour chaque sous répertoire
For Each SubFol In Fol.subfolders

'Récupere le repertoire
Set Fol1 = Fso.GetFolder(SubFol)

'Pour chaque Fichiers du repertoire
For Each Fi1 In Fol1.Files
'écrit le nom dans le fichier si c'est un .bat ou vbs ou mst ou msi ou exe
' If (InStr(1, Fi1, ".bat", 1) > 0) Or (InStr(1, Fi1, ".vbs", 1) > 0) Or (InStr(1, Fi1, ".mst", 1) > 0) Or (InStr(1, Fi1, ".msi", 1) > 0) Or (InStr(1, Fi1, ".exe", 1) > 0) Then

If (InStr(1, Fi1, ".bat", 1) > 0) Then
Fi2 = (Fol1.Name & "" & Fi1.Name)
Exit For

ElseIf (InStr(1, Fi1, ".vbs", 1) > 0) Then
If (InStr(1, Fi2, ".bat", 1) 0) Then Fi2 (Fol1.Name & "" & Fi1.Name)

' ElseIf (InStr(1, Fi1, ".mst", 1) > 0) Then
' If (InStr(1, Fi2, ".bat", 1) 0) And (InStr(1, Fi2, ".vbs", 1) 0) Then Fi2 = (Fol1.Name & "" & Fi1.Name)

ElseIf (InStr(1, Fi1, ".msi", 1) > 0) Then
If (InStr(1, Fi2, ".bat", 1) 0) And (InStr(1, Fi2, ".vbs", 1) 0) And (InStr(1, Fi2, ".mst", 1) = 0) Then Fi2 = (Fol1.Name & "" & Fi1.Name)

ElseIf (InStr(1, Fi1, ".exe", 1) > 0) Then
If (InStr(1, Fi2, ".bat", 1) 0) And (InStr(1, Fi2, ".vbs", 1) 0) And (InStr(1, Fi2, ".mst", 1) = 0) And (InStr(1, Fi2, ".msi", 1) = 0) Then Fi2 = (Fol1.Name & "" & Fi1.Name)

Else
' MsgBox (Fi1 & "c'est pas un exe")
End If

' End If
Next

If Fi2 <> 0 Then List_Appli.AddItem Fi2

Fi2 = 0

Next

'Destruction des object
Set Fi = Nothing
Set Fi1 = Nothing
Set Fi2 = Nothing
Set SubFol = Nothing
Set SubFol1 = Nothing
Set Fol = Nothing
Set Fol1 = Nothing


End Sub

4 réponses

Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
19 mai 2010 à 14:30
Bonjour,

Le File System Object est connu pour être lent. Je pense qu'il est préférable d'utiliser les API WIndows pour ce faire.

Regarde sur le site; il y a de nombreux exemples.


Calade
steph94700 Messages postés 2 Date d'inscription mercredi 4 novembre 2009 Statut Membre Dernière intervention 19 mai 2010
19 mai 2010 à 17:08
Merci Calade pour ta réponse,
Est ce que tu peux me donner une commande API WIndows, pour faire ma recherche?
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
20 mai 2010 à 09:28
Bonjour,

Intéresse-toi aux API FindFirstFile et FindNextFile. Malgré leur nom, tu récupères aussi bien les dossiers, il suffit de jouer avec les attributs.


Calade
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
20 mai 2010 à 12:25
Bonjour,
J'ai fait un programme de recherche de fichiers
Ex: 710 Fichiers exe en 0,89 seconde
Si cela vous intéresse allez sur:
http://www.vbfrance.com/codes/RECHERCHER-FICHIERS_45981.aspx
vous trouverez le module de recherche que vous pourrez adapter à vos besoins
@+
Rejoignez-nous