Recherche fichier sous 2 niveau [Résolu]

Messages postés
72
Date d'inscription
vendredi 25 février 2005
Statut
Membre
Dernière intervention
14 janvier 2013
- - Dernière réponse : elguevel
Messages postés
735
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
22 novembre 2016
- 9 févr. 2010 à 08:34
Salut à tous,

Voila je souhaite faire la recherche d'un fichier dans tous les dossiers après le disque c:\ ainsi que leur sous-répertoires mais pas plus loin, soit un niveau 2 à partir du c:\, (exemple: c:\dossier\dossier\fichier_trouvé).
Je pense avoir trouvé, mais j'ai une erreur qui survient, et je n'arrive pas à aller au niveau des sous-répertoires sans avoir une exception voici mon code:

Public Function recherche_dossier(ByVal disque As String, ByVal fichier As String)
Dim i As String
Configurateur.ComboBox3.Items.Clear()
i = 0
For Each strFolder As String In My.Computer.FileSystem.GetDirectories("C:")
Try
For Each strFile As String In My.Computer.FileSystem.GetFiles(strFolder)
If Right(strFile, Len(fichier)) = fichier Then
i = i + 1
If i > 1 Then
Configurateur.ComboBox3.Items.Add(Left(strFile, Len(strFile) - Len(fichier) - 1))
End If
Else
End If
Next
Catch ex As Exception

End Try
Next
End Function


Merci pour votre aide, j'ai cherché partout et je n'ai toujours pas trouvé la solution.
Afficher la suite 

5 réponses

Meilleure réponse
Messages postés
735
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
22 novembre 2016
3
3
Merci
Avant tout, je vois un truc qui me choque :

Dim i As String
i = 0

Je te laisse y reflechir !

----

Sinon il faut utiliser la recursivité pour ton truc, en gros à chaque fois que la fonction se rappelle, tu descends d'un niveau.
Je t'ai mis une variable niveau pour savoir où tu en es.

Private Niveau As Integer = 0

Private Sub ScanDossier(ByVal Repertoire As String)

Try
Niveau += 1

' Balaie les fichiers d'un dossier
For Each Fichier As String In Directory.GetFiles(Repertoire)
[Code avec Fichier]
Next

' Recursivité
Dim SousDossiers As String() = Directory.GetDirectories(Repertoire)

For Each Dossier As String In SousDossiers
ScanDossier(Dossier)
Next
' Fin Recursivité

Niveau -= 1

Catch ex As Exception
Throw New Exception(String.Format("Erreur pendant la recusrsivité - Erreur : {0}", ex.Message))
End Try

End Sub

Bon code ...

/\_/\
( o.o ) ~ ElGuevel ~
 > - <

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 196 internautes nous ont dit merci ce mois-ci

Commenter la réponse de elguevel
Messages postés
72
Date d'inscription
vendredi 25 février 2005
Statut
Membre
Dernière intervention
14 janvier 2013
0
Merci
Salut,

Oui effectivement pour "I", un interger serait mieux .

Par contre, je vais essayer de me pencher fort sur la récursivité, mais j'ai du mal à comprendre là...
Commenter la réponse de Portos67
Messages postés
72
Date d'inscription
vendredi 25 février 2005
Statut
Membre
Dernière intervention
14 janvier 2013
0
Merci
J'ai toujours un message d'erreur qui m'indique que je n'ai pas accès au répertoire "systeme volume information".....
Commenter la réponse de Portos67
Messages postés
2
Date d'inscription
mercredi 17 décembre 2008
Statut
Membre
Dernière intervention
9 février 2010
0
Merci
Bonjour à tous !

Je me permet de rebondir sur le sujet...

J'ai essayé d'adapter ce code-source à mon propre projet mais ça plante de tous les côtés...

Ce que j'essaye de faire depuis maintenant plusieurs jours, c'est de vérifier, depuis Excel et en VBA, l'existence d'un fichier exe, à savoir "googleearth.exe" et d'en récupérer le cas échéant le path sous la forme "C:\Program Files\Google\googleearth.exe".

J'ai cherché pas mal de choses déjà faites mais rien ne marche ou n'est adapté...

Une idée ? :)

D'avance merci...

Adri
Commenter la réponse de Dridounet7787
Messages postés
735
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
22 novembre 2016
3
0
Merci
Normal que tu ne puisses accéder à "System Volume Information", le système t'en empeche volontairement.

Pour éviter ce probleme, tu peux virer dans le Catch la ligne "Throw New Exception(String.Format("Erreur pendant la recusrsivité - Erreur : {0}", ex.Message))", du coup en cas d'erreur, il passera au dossier suivant tout simplement.

Dridounet7787 > meme méthode, la recursivité !
Commenter la réponse de elguevel