Recherche fichier sous 2 niveau

Résolu
Portos67 Messages postés 72 Date d'inscription vendredi 25 février 2005 Statut Membre Dernière intervention 14 janvier 2013 - 29 janv. 2010 à 12:27
elguevel Messages postés 718 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.

5 réponses

elguevel Messages postés 718 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 22 novembre 2016 3
29 janv. 2010 à 14:38
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 ~
 > - <
3
Portos67 Messages postés 72 Date d'inscription vendredi 25 février 2005 Statut Membre Dernière intervention 14 janvier 2013 1
29 janv. 2010 à 14:59
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à...
0
Portos67 Messages postés 72 Date d'inscription vendredi 25 février 2005 Statut Membre Dernière intervention 14 janvier 2013 1
29 janv. 2010 à 15:23
J'ai toujours un message d'erreur qui m'indique que je n'ai pas accès au répertoire "systeme volume information".....
0
Dridounet7787 Messages postés 2 Date d'inscription mercredi 17 décembre 2008 Statut Membre Dernière intervention 9 février 2010
9 févr. 2010 à 00:25
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
elguevel Messages postés 718 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 22 novembre 2016 3
9 févr. 2010 à 08:34
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é !
0
Rejoignez-nous