Hackdevil
Messages postés28Date d'inscriptiondimanche 2 janvier 2005StatutMembreDernière intervention 5 mai 2014
-
12 juin 2013 à 11:56
Utilisateur anonyme -
14 juin 2013 à 13:04
Bonjour,
J'ai fait un système de recherche de fichier qui fonctionne à peu près correctement.
A peu près parce qu'il y a parfois des résultats étonnants et je n'arrive pas à comprendre pourquoi.
Voici le code :
Dim di As DirectoryInfo = New DirectoryInfo("U:")
Dim TousLesFichiers As FileInfo() = Nothing
Try
For Each Repertoire In di.GetDirectories
Try
TousLesFichiers = Repertoire.GetFiles("*" & txtboxRecherche.Text & "*", SearchOption.AllDirectories)
For Each ChaqueFichier In TousLesFichiers
FormTableauAffichage.RtxtBoxListe.Text &= vbCrLf & ChaqueFichier.FullName
FormTableauAffichage.RtxtBoxListe.SelectionAlignment = HorizontalAlignment.Center
Next
Catch ex As UnauthorizedAccessException
End Try
Next
Catch ex As Exception
MessageBox.Show(ex.Message, "ERREUR")
EnregistreRepertoire()
Exit Sub
End Try
Donc, on renseigne une partie du nom de fichier à rechercher dans txtboxRecherche.Text et on lance la recherche.
Il est cencé me trouver tous les fichiers contenant par exemple "fe" (ces deux lettres me donnent des mauvais résultats).
Puis me l'affiche dans un richtextbox qui est dans un autre form.
En cas d'accès refusé, il continue.
Voici le resultat de ma recherche :
U:\2008 server\Outils\GPO\CSE pour Win 2003 (Preferences pour GPO).exe
U:\2008 server\Outils\GPO\CSE pour XP (Preferences pour GPO).exe
U:\2008 server\Outils\GPO\AdminTemplates_x86\access14.adm9
U:\2008 server\Outils\GPO\AdminTemplates_x86\office14.adml5
U:\2008 server\Outils\GPO\AdminTemplates_x86\office14.adm5
U:\2008 server\Outils\GPO\AdminTemplates_x86\onent14.adml4
U:\2008 server\Outils\GPO\AdminTemplates_x86\visio14.admx
U:\2008 server\Outils\GPO\AdminTemplates_x86\word14.adml2
U:\2008 server\Outils\GPO\AdminTemplates_X64\access14.adm9
U:\2008 server\Outils\GPO\AdminTemplates_X64\office14.adml5
U:\2008 server\Outils\GPO\AdminTemplates_X64\office14.adm5
U:\2008 server\Outils\GPO\AdminTemplates_X64\onent14.adml4
U:\2008 server\Outils\GPO\AdminTemplates_X64\visio14.admx
U:\2008 server\Outils\GPO\AdminTemplates_X64\word14.adml2
U:\ASSR2 2012-2013\ASSR2_Rattrapage_56cdfe3ce5 Rattrapage\CORRIGE_ASSR2_56cdfe3ce5.pdf
U:\ASSR2 2012-2013\ASSR2_Rattrapage_56cdfe3ce5 Rattrapage\Epreuve_ASSR2_ref_56cdfe3ce5.avi
U:\ASSR2 2012-2013\ASSR2_Rattrapage_56cdfe3ce5 Rattrapage\GRILLES_ASSR2_56cdfe3ce5.pdf
U:\Ma musique\08 - Get Lucky (feat. Pharrell Williams).mp3
U:\System\Application Data\OpenOffice.org\3\user\registry\cache\org.openoffice.Setup.dat
U:\System\Application Data\Mozilla\Firefox\Profiles\Default\extensions\{20a82645-c095-46ed-80e3-08825760534b}\chrome.manifest
U:\System\Application Data\Microsoft\Protect\S-1-5-21-4181368152-1849255957-1605149384-1108\ee38ac6f-1687-49e2-bbfe-c3d596af4646
U:\System\Application Data\Microsoft\Protect\S-1-5-21-4181368152-1849255957-1605149384-1108\Preferred
U:\System\Application Data\Microsoft\Crypto\RSA\S-1-5-21-4181368152-1849255957-1605149384-1108\83aa4cc77f591dfc2374580bbd95f6ba_45c91fed-d921-4454-9a79-6f967172432c
U:\System\Application Data\Microsoft\CryptnetUrlCache\MetaData\1F356F4D07FE8C483E769E4586569404
U:\System\Application Data\Microsoft\CryptnetUrlCache\MetaData\3130B1871A126520A8C47861EFE3ED4D
U:\System\Application Data\Microsoft\CryptnetUrlCache\MetaData\7B2238AACCEDC3F1FFE8E7EB5F575EC9
U:\System\Application Data\Microsoft\CryptnetUrlCache\MetaData\8EDCF682921FE94F4A02A43CD1A28E6B
U:\System\Application Data\Microsoft\CryptnetUrlCache\MetaData\D0F063B6B88A2B8BFE21C3993A613447
U:\System\Application Data\Microsoft\CryptnetUrlCache\MetaData\D41693DAFE5DEF0C36959FF1FCEF5C96
U:\System\Application Data\Microsoft\CryptnetUrlCache\Content\1F356F4D07FE8C483E769E4586569404
U:\System\Application Data\Microsoft\CryptnetUrlCache\Content\3130B1871A126520A8C47861EFE3ED4D
U:\System\Application Data\Microsoft\CryptnetUrlCache\Content\7B2238AACCEDC3F1FFE8E7EB5F575EC9
U:\System\Application Data\Microsoft\CryptnetUrlCache\Content\8EDCF682921FE94F4A02A43CD1A28E6B
U:\System\Application Data\Microsoft\CryptnetUrlCache\Content\D0F063B6B88A2B8BFE21C3993A613447
U:\System\Application Data\Microsoft\CryptnetUrlCache\Content\D41693DAFE5DEF0C36959FF1FCEF5C96
U:\Visual Studio 2010\Projects\RechercheLycée\RechercheLycée\obj\x86\Release\DesignTimeResolveAssemblyReferences.cache
U:\Visual Studio 2010\Projects\RechercheLycée\RechercheLycée\obj\x86\Release\DesignTimeResolveAssemblyReferencesInput.cache
U:\Visual Studio 2010\Projects\RechercheLycée\RechercheLycée\obj\x86\Debug\DesignTimeResolveAssemblyReferences.cache
U:\Visual Studio 2010\Projects\RechercheLycée\RechercheLycée\obj\x86\Debug\DesignTimeResolveAssemblyReferencesInput.cache
U:\Visual Studio 2010\Projects\RechercheLycée\RechercheLycée\My Project\app.manifest
U:\Visual Studio 2010\Projects\RechercheLycée\RechercheLycée\bin\Release\RechercheLycée.vshost.exe.manifest
U:\Visual Studio 2010\Projects\RechercheLycée\RechercheLycée\bin\Debug\WindowsApplication1.vshost.exe.manifest
U:\Visual Studio 2010\Projects\Copie de RechercheLycée\RechercheLycée\obj\x86\Release\DesignTimeResolveAssemblyReferences.cache
U:\Visual Studio 2010\Projects\Copie de RechercheLycée\RechercheLycée\obj\x86\Release\DesignTimeResolveAssemblyReferencesInput.cache
U:\Visual Studio 2010\Projects\Copie de RechercheLycée\RechercheLycée\obj\x86\Debug\DesignTimeResolveAssemblyReferences.cache
U:\Visual Studio 2010\Projects\Copie de RechercheLycée\RechercheLycée\obj\x86\Debug\DesignTimeResolveAssemblyReferencesInput.cache
U:\Visual Studio 2010\Projects\Copie de RechercheLycée\RechercheLycée\My Project\app.manifest
U:\Visual Studio 2010\Projects\Copie de RechercheLycée\RechercheLycée\bin\Release\RechercheLycée.vshost.exe.manifest
U:\Visual Studio 2010\Projects\Copie de RechercheLycée\RechercheLycée\bin\Debug\WindowsApplication1.vshost.exe.manifest
Déjà tu ne dois pas appeler ta sub 'Dir' car j'ai vu que tu n'as pas désactivé 'Microsoft.VisualBasic' dans les références.
Il va utiliser donc la fonction Dir de VB6 directement et voilà le pourquoi de certaines de tes erreurs.
Ta sub doit se résumer à ça:
'Sub MaDir A NE PAS CONFONDRE AVEC L'INSTRUCTION 'DIR' DE VB6
Private Sub MaDir(ByVal Chemin As String)
If txtboxRecherche.TextLength >= 2 Then
Try
For Each Fichier In System.IO.Directory.GetFiles(Chemin)
If Fichier.Contains(txtboxrecherche) Then
FormTableauAffichage.RtxtBoxListe.Text &= Environment.NewLine & Fichier
FormTableauAffichage.RtxtBoxListe.SelectionAlignment = HorizontalAlignment.Center
End If
Next
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
Try
For Each Dossier In System.IO.Directory.GetDirectories(Chemin)
MaDir(Dossier)
Next
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End If
End Sub
Hackdevil
Messages postés28Date d'inscriptiondimanche 2 janvier 2005StatutMembreDernière intervention 5 mai 2014 14 juin 2013 à 11:32
Ah, ça y est j'ai trouvé :
Private Sub Recherche(ByVal Chemin As String)
Try
Dim NomFichier As String
For Each Fichier In System.IO.Directory.GetFiles(Chemin)
NomFichier = System.IO.Path.GetFileName(Fichier)
If NomFichier.Contains(txtboxRecherche.text) Then
ListFichiers.Items.Add(Fichier)
End If
Next
Catch ex As Exception
ListErreurs.Items.Add(ex.Message)
End Try
Try
For Each Dossier In System.IO.Directory.GetDirectories(Chemin)
Recherche(Dossier)
Next
Catch ex As Exception
End Try
End Sub
Bonjour,
Essaye ça... ça devrait te remettre dans la bonne voie...
Option Explicit On
Option Strict On
Public Class Form1
Dim ListFichiers As New ListBox
Dim ListErreurs As New ListBox
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
ListFichiers.Top = 0
ListErreurs.Top = ListFichiers.Height + 20
ListFichiers.Left = 0
ListErreurs.Left = 0
ListFichiers.Width = 450
ListErreurs.Width = 450
Me.Controls.Add(ListFichiers)
Me.Controls.Add(ListErreurs)
Recherche("c:\windows\system32")
End Sub
Private Sub Recherche(ByVal Chemin As String)
Try
For Each Fichier In System.IO.Directory.GetFiles(Chemin)
ListFichiers.Items.Add(Fichier)
Next
Catch ex As Exception
ListErreurs.Items.Add(ex.Message)
End Try
Try
For Each Dossier In System.IO.Directory.GetDirectories(Chemin)
Recherche(Dossier)
Next
Catch ex As Exception
End Try
End Sub
End Class
Hackdevil
Messages postés28Date d'inscriptiondimanche 2 janvier 2005StatutMembreDernière intervention 5 mai 2014 13 juin 2013 à 12:19
Bonjour,
je viens de tester ton code et effectivement il y a du mieux.
Mais ça vérifie dans le chemin et non juste le nom de fichier.
Je me suis basé sur ton code, ce qui donne ça :
Option Explicit On
Option Strict On
Imports System.IO
Imports System
Imports Microsoft.Win32
Public Class FormPrincipal
Dim di As DirectoryInfo = New DirectoryInfo("G:\classement")
Private Sub btnRecherche_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRecherche.Click
Dir(di.FullName)
FormTableauAffichage.ShowDialog()
End Sub
Private Sub Dir(ByVal Chemin As String)
If txtboxRecherche.TextLength >= 2 Then
Try
For Each Fichier In System.IO.Directory.GetFiles(Chemin)
If Fichier Like "*" & txtboxRecherche.Text & "*" Then
FormTableauAffichage.RtxtBoxListe.Text &= vbCrLf & Fichier
FormTableauAffichage.RtxtBoxListe.SelectionAlignment = HorizontalAlignment.Center
End If
Next
Catch ex As Exception
End Try
Try
Try
For Each Dossier In System.IO.Directory.GetDirectories(Chemin)
Dir(Dossier)
Next
Catch ex As UnauthorizedAccessException
End Try
Catch ex As Exception
MessageBox.Show(ex.Message, "ERREUR")
EnregistreRepertoire()
Exit Sub
End Try
Else
MessageBox.Show("Texte trop court, 2 caractères minimum", "ERREUR")
Exit Sub
End If
End Sub
Sub EnregistreRepertoire()
'''Aucun interet dans ce sujet'''
End Sub
End Class
Par contre je n'ai pas la solution pour faire la vérification sur le fichier et non le chemin complet.
Une piste ?
Merci.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Hackdevil
Messages postés28Date d'inscriptiondimanche 2 janvier 2005StatutMembreDernière intervention 5 mai 2014 14 juin 2013 à 10:38
Bonjour,
Merci ça m'aura fait apprendre l'équivalent de vbcrlf qui est Environment.NewLine.
J'ai viré du coup 'Microsoft.VisualBasic' dans les références.
J'avais pas percuté pour le dir que ça aurait pu créer un conflit mais dans ce cas là, ce n'est pas ce qui fait que ça ne fonctionne pas.
On demande de tester chaque nom de fichier pour voir s'il contient la chaine "fe" par exemple.
Si c'est le cas, il l'ajoute au textbox.
Mais pourtant ce n'est pas ce qu'il se passe.
Il ne semble pas vérifier si c'est le nom de fichier qui contient la chaine "fe" mais si c'est le nom du chemin.
Du coup il me sort plus de résultats que prévu.
Du coup, je me suis dit, pourquoi ne pas récupérer la chaine jusqu'au "" en partant de la droite puis tester s'il contient "fe".
Le problème c'est que je ne trouve pas en vb.net de façon de le faire simplement.
Il y a bien la solution du split et récupérer la dernière chaine mais c'est pas terrible...
Il me semble aussi qu'on peut récupérer juste les fichiers avec un truc du genre blabla.name au lieu de blabla.fullname.
Désolé, je programme une fois par an en autodidacte donc je n'ai pas un bon niveau.