little boy62
Messages postés3440Date d'inscriptionlundi 11 novembre 2013StatutMembreDernière intervention 5 juin 2023
-
11 oct. 2020 à 12:47
little boy62
Messages postés3440Date d'inscriptionlundi 11 novembre 2013StatutMembreDernière intervention 5 juin 2023
-
17 janv. 2021 à 19:17
Bonjour à tous.
Gros débutant que je suis, je cherche à apprendre en autodidacte le VB.Net.
Habituellement, je "scripte" en AutoIt...
J'ai donc décidé de faire la base des bases : une simple recherche récursive.
Ce script fonctionne (il recherche sur le bureau) :
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button2.Click
'Dim NF = TextBox1.Text
'Dim CT = TextBox2.Text
'Dim DS = TextBox3.Text
Dim cheminBUR = "C:\Users\tomce\Desktop"
Dim CheminRDD = "C:\"
For Each file As String In Directory.GetFiles(cheminBUR, "*.txt", SearchOption.AllDirectories)
Console.WriteLine(file)
Next
Console.WriteLine("FIN")
End Sub
J'ai bien la dite liste dans la console.
Ce script ne fonctionne pas :
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button2.Click
'Dim NF = TextBox1.Text
'Dim CT = TextBox2.Text
'Dim DS = TextBox3.Text
Dim cheminBUR = "C:\Users\tomce\Desktop"
Dim CheminRDD = "C:\"
For Each file As String In Directory.GetFiles(cheminRDD, "*.txt", SearchOption.AllDirectories)
Console.WriteLine(file)
Next
Console.WriteLine("FIN")
End Sub
J'ai comme erreur : exception non gérée.
ystem.UnauthorizedAccessException : 'L'accès au chemin d'accès 'C:\Documents and Settings' est refusé.'
-> https://i.imgur.com/vOvTYbw.png
J'ai donc décidé d'utiliser Catch .... Try
Plus d'erreur, mais une fois l'erreur trouvée, il s'arrête.
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button2.Click
'Dim NF = TextBox1.Text
'Dim CT = TextBox2.Text
'Dim DS = TextBox3.Text
' premier
Dim cheminBUR = "C:\Users\tomce\Desktop"
Dim CheminRDD = "C:\"
Try
For Each file As String In Directory.GetFiles(cheminBUR, "*.txt", SearchOption.AllDirectories)
Console.WriteLine(file)
Next
Catch uax As UnauthorizedAccessException
End Try
Console.WriteLine("FIN")
End Sub
little boy62
Messages postés3440Date d'inscriptionlundi 11 novembre 2013StatutMembreDernière intervention 5 juin 2023 25 oct. 2020 à 13:59
Bonjour.
Je passe en résolu.
Non pas parce que résolu, mais que ça devient un poil compliqué....
Petite parenthèse : désolée de la réponse tardive, mais avec le boulot, arffff ^^
Bref, j'essayais d'apprendre la recherche récursive. En aucun cas de créer un outil qui l'a déjà été, en largement mieux (Agent Ransack reste mon préféré).
little boy62
Messages postés3440Date d'inscriptionlundi 11 novembre 2013StatutMembreDernière intervention 5 juin 2023 17 janv. 2021 à 18:14
Salut.
Suite à une énième curiosité de ma part, je voulais "encore" faire une recherche récursive...
Mais j'avais oublié (mémoire de ....) que j'avais créé un topic d'aide...
J'avais donc décidé de revenir demandé de l'aide, et je me suis aperçu que j'avais déjà sollicité la communauté pour la même chose...
J'ai donc bien fait de revenir, car, @Whismeril, tu m'avais mis sur la bonne voie en fait...
( comme d'habitude d'ailleurs ^^ )
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
Donc, si j'ai bien compris :
- Je liste d'abord les fichiers dans le dossier de base
- puis je liste les dossier
- Chaque dossier listé, je refais une recherche de fichiers
- Et ainsi de suite, grâce au rappel de la fonction.
Sans oublier les deux try/catch/end try pour passer outre les fichiers/dossiers protégées
résultat : ça fonctionne...
Je peux passer vraiment en.... résolu :D
Je ne savais pas qu'on pouvait appeler la fonction dans la même fonction, donc merci de m'avoir aiguiller.
++
Whismeril
Messages postés18417Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention 5 juin 2023624 17 janv. 2021 à 18:29
Bonjour
de rien, surtout que
Je ne savais pas qu'on pouvait appeler la fonction dans la même fonction
c'est la définition de "récursivité" donc je prenais ça pour acquis.
little boy62
Messages postés3440Date d'inscriptionlundi 11 novembre 2013StatutMembreDernière intervention 5 juin 2023
>
Whismeril
Messages postés18417Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention 5 juin 2023 Modifié le 17 janv. 2021 à 19:19
je l'avais acquis, mais sur un autre langage.
Ce n'est pas absolument la même syntaxe, ni la même conception...
Du coup, à l'époque, j'étais largué ^^
Largué au point de faire autrement...
Private Sub Listing_swf_2()
ListView1.Items.Clear()
Dim fichier = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) & "\fichier.txt"
If My.Computer.FileSystem.FileExists(fichier) = True Then My.Computer.FileSystem.DeleteFile(fichier)
Dim dirs() As String = Directory.GetLogicalDrives()
Dim i As Long
For i = dirs.GetLowerBound(0) To dirs.GetUpperBound(0)
Dim LecteurOptique = dirs(i)
Dim cmdline = "dir /b /s " & LecteurOptique & "*.swf* >> " & Chr(34) & fichier & Chr(34) & " & exit"
Dim p As New ProcessStartInfo("cmd.exe", "/c " & cmdline)
p.WindowStyle = ProcessWindowStyle.Hidden
p.CreateNoWindow = True
Process.Start(p).WaitForExit()
Next i
Dim contenu_f As String = File.ReadAllText(fichier)
If My.Computer.FileSystem.FileExists(fichier) = True Then My.Computer.FileSystem.DeleteFile(fichier)
Dim lignes() = Split(contenu_f, vbCrLf)
Dim nb = "0"
For Each ligne In lignes
If My.Computer.FileSystem.FileExists(ligne) = True Then
Dim ext = ligne.Substring(ligne.Length - 4)
If ext = ".swf" Then
nb += 1
Dim itm = ListView1.Items.Add(nb)
itm.SubItems.Add(ligne)
End If
End If
Next
End Sub