Traitement erreur refus d'accès [Résolu]

Messages postés
32
Date d'inscription
samedi 30 mars 2013
Dernière intervention
22 février 2014
- - Dernière réponse : duarep
Messages postés
32
Date d'inscription
samedi 30 mars 2013
Dernière intervention
22 février 2014
- 10 avril 2011 à 18:57
Bonjour
Dans le programme suivant, le listing des fichiers d'un dossier et éventuellement de ses sous dossiers se termine en err lorsqu'il cherche à accéder à un dossier système par ex D:\System Volume Information si je damande à traiter D: et ses sous dossiers.
Quelqu'un peut-il m'indiquer comment traiter l'erreur pour éviter le dossier protégé tout en traitant les autres dossiers.
Merci par avance
Jacques
Dim Nbr As Integer = 0
Dim fichier As String
If RepDone = False Then
MsgBox("Donnez le répertoire à traiter")
Exit Sub
End If
If Extension1 = "" Then
MsgBox("Donnez le type d'extension à traiter")
Exit Sub
End If
ListBox4.Items.Clear()
ListBox4.Sorted = True
'Stop
If Me.CheckBox1.Checked = True Then 'Si case sous rép cochée -> recherche dans les sous répertoire
For Each fichier In Directory.GetFiles(Chemin, Extension1, System.IO.SearchOption.AllDirectories)
If RadioButton4.Checked Then 'Si checked liste + sauve dans tableau D3 sinon liste seulement
If fichier.Contains(TextBox3.Text) Then
Me.ListBox4.Items.Add(fichier)
D3(Nbr) = (fichier)
Nbr = Nbr + 1
ReDim Preserve D3(Nbr + 1)
End If
Else
Me.ListBox4.Items.Add(fichier)
D3(Nbr) = (fichier)
Nbr = Nbr + 1
ReDim Preserve D3(Nbr + 1)
End If
Next
Else 'Si case sous rép pas cochée = recherche uniquement dans le répertoire
For Each fichier In Directory.GetFiles(Chemin, Extension1)
If RadioButton4.Checked Then
If fichier.Contains(TextBox3.Text) Then
Me.ListBox4.Items.Add(fichier)
D3(Nbr) = (fichier)
Nbr = Nbr + 1
ReDim Preserve D3(Nbr + 1)
End If
Else
Me.ListBox4.Items.Add(fichier)
D3(Nbr) = (fichier)
Nbr = Nbr + 1
ReDim Preserve D3(Nbr + 1)
End If
Next
End If
Afficher la suite 

Votre réponse

18 réponses

Meilleure réponse
Messages postés
14322
Date d'inscription
vendredi 14 mars 2003
Dernière intervention
14 décembre 2018
3
Merci
Bonjour,

Erreur 404, remets ton code avec la coloration syntaxique et ce sera bien.

Mon site

Dire « Merci » 3

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

Codes Sources a aidé 106 internautes ce mois-ci

Commenter la réponse de NHenry
Messages postés
14322
Date d'inscription
vendredi 14 mars 2003
Dernière intervention
14 décembre 2018
0
Merci
Bonjour,

Utilises le bloc :
Try
...
Catch ...
...
Finally
...
End Try

Mon site
Commenter la réponse de NHenry
Messages postés
32
Date d'inscription
samedi 30 mars 2013
Dernière intervention
22 février 2014
0
Merci
J'ai essayé mais cela semble ne pas fonctionner à l'intérieur d'un For
et je ne peux donc pas retourner dans la routine pour traiter la suite des répertoires
Jacques
Commenter la réponse de duarep
Messages postés
14322
Date d'inscription
vendredi 14 mars 2003
Dernière intervention
14 décembre 2018
0
Merci
Bonjour,

Montres le code que tu as fait avec alors, pense à la coloration syntaxique (3ième image en partant de la droite).

Mon site
Commenter la réponse de NHenry
Messages postés
32
Date d'inscription
samedi 30 mars 2013
Dernière intervention
22 février 2014
0
Merci
Si je met le Try juste avant le
For Each fichier In Directory.GetFiles(Chemin, Extension1, System.IO.SearchOption.AllDirectories)
je suis obligé de mettre le End Try après le Next de cette ligne For (Si je le met dans la boucle elle est en erreur (Pas de Next)
et lorsque j'insère dans la boucle un Catch le catch dit manquer de End Try le For manquer de Next et le End Try manquer de Try.

Désolé mais je n'ai pas saisi comment mettre en oeuvre la coloration syntaxique

Jacques
Commenter la réponse de duarep
Messages postés
14322
Date d'inscription
vendredi 14 mars 2003
Dernière intervention
14 décembre 2018
0
Merci
Bonjour,

Mets le code avec la coloration syntaxique, il est illisible comme ça.

Mon site
Commenter la réponse de NHenry
Messages postés
32
Date d'inscription
samedi 30 mars 2013
Dernière intervention
22 février 2014
0
Merci
Désolé mais je n'ai pas saisi comment mettre en oeuvre la coloration syntaxique . Quelle est cette(3ième image en partant de la droite).
Jacques
Commenter la réponse de duarep
Messages postés
14322
Date d'inscription
vendredi 14 mars 2003
Dernière intervention
14 décembre 2018
0
Merci
Bonjour,

Dans la barre juste audessus de la zone de réponse, tu las les images pour mettre en gras, italique, souligné, ...
C'est la 3ième à droite.

Mon site
Commenter la réponse de NHenry
Messages postés
32
Date d'inscription
samedi 30 mars 2013
Dernière intervention
22 février 2014
0
Merci
Entre temps, j'ai copié dans un fichier word a télécharger http://duarep.free.fr/download/Provisoire/Fichiers/Button6.zip
Jacques
Commenter la réponse de duarep
Messages postés
32
Date d'inscription
samedi 30 mars 2013
Dernière intervention
22 février 2014
0
Merci
    Private Sub Button6_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
        Dim Nbr As Integer = 0
        Dim fichier As String
        Dim Chemin2 As String
        If RepDone = False Then
            MsgBox("Donnez le répertoire à traiter")
            Exit Sub
        End If
        If Extension1 = "" Then
            MsgBox("Donnez le type d'exstension à traiter")
            Exit Sub
        End If
        ListBox4.Items.Clear()
        ListBox4.Sorted = True
        'Stop
        If Me.CheckBox1.Checked = True Then  'Si case sous rép cochée -> recherche dans les sous répertoire
            Dim SousDos() As String = Directory.GetDirectories(Chemin)
            Dim Dossier As String

            For Each Dossier In SousDos
                MsgBox(Dossier)
                If Dossier.Contains("System Volume Information") Then
                    GoTo Saute
                End If

                Chemin2 = Dossier

                For Each fichier In Directory.GetFiles(Chemin2, Extension1, System.IO.SearchOption.AllDirectories)
                    If RadioButton4.Checked Then
                        If fichier.Contains(TextBox3.Text) Then
                            Me.ListBox4.Items.Add(fichier)
                            D3(Nbr) = (fichier)
                            Nbr = Nbr + 1
                            ReDim Preserve D3(Nbr + 1) ' ne pas oublier le preserve sinon les données sont effacées
                        End If

                    Else
                        Me.ListBox4.Items.Add(fichier)
                        D3(Nbr) = (fichier)
                        Nbr = Nbr + 1
                        ReDim Preserve D3(Nbr + 1) ' ne pas oublier le preserve sinon les données sont effacées

                    End If
                Next
Saute:

            Next

        Else   'Si case sous rép pas cochée  = recherche uniquement dans le répertoire
            For Each fichier In Directory.GetFiles(Chemin, Extension1)
                If RadioButton4.Checked Then
                    If fichier.Contains(TextBox3.Text) Then
                        Me.ListBox4.Items.Add(fichier)
                        D3(Nbr) = (fichier)
                        Nbr = Nbr + 1
                        ReDim Preserve D3(Nbr + 1) ' ne pas oublier le preserve sinon les données sont effacées
                    End If

                Else
                    Me.ListBox4.Items.Add(fichier)
                    D3(Nbr) = (fichier)
                    Nbr = Nbr + 1
                    ReDim Preserve D3(Nbr + 1) ' ne pas oublier le preserve sinon les données sont effacées
                End If
            Next
        End If
    End Sub

Jacques
Commenter la réponse de duarep
Messages postés
32
Date d'inscription
samedi 30 mars 2013
Dernière intervention
22 février 2014
0
Merci
Private Sub Button6_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
        Dim Nbr As Integer = 0
        Dim fichier As String
        If RepDone = False Then
            MsgBox("Donnez le répertoire à traiter")
            Exit Sub
        End If
        If Extension1 = "" Then
            MsgBox("Donnez le type d'exstension à traiter")
            Exit Sub
        End If
        ListBox4.Items.Clear()
        ListBox4.Sorted = True
        'Stop
        If Me.CheckBox1.Checked = True Then  'Si case sous rép cochée -> recherche dans les sous répertoire
            For Each fichier In Directory.GetFiles(Chemin, Extension1, System.IO.SearchOption.AllDirectories)
                If RadioButton4.Checked Then
                    If fichier.Contains(TextBox3.Text) Then
                        Me.ListBox4.Items.Add(fichier)
                        D3(Nbr) = (fichier)
                        Nbr = Nbr + 1
                        ReDim Preserve D3(Nbr + 1) ' ne pas oublier le preserve sinon les données sont effacées
                    End If

                Else
                    Me.ListBox4.Items.Add(fichier)
                    D3(Nbr) = (fichier)
                    Nbr = Nbr + 1
                    ReDim Preserve D3(Nbr + 1) ' ne pas oublier le preserve sinon les données sont effacées

                End If
            Next
        Else   'Si case sous rép pas cochée  = recherche uniquement dans le répertoire
        For Each fichier In Directory.GetFiles(Chemin, Extension1)
            If RadioButton4.Checked Then
                If fichier.Contains(TextBox3.Text) Then
                    Me.ListBox4.Items.Add(fichier)
                    D3(Nbr) = (fichier)
                    Nbr = Nbr + 1
                    ReDim Preserve D3(Nbr + 1) ' ne pas oublier le preserve sinon les données sont effacées
                End If

            Else
                Me.ListBox4.Items.Add(fichier)
                D3(Nbr) = (fichier)
                Nbr = Nbr + 1
                ReDim Preserve D3(Nbr + 1) ' ne pas oublier le preserve sinon les données sont effacées
            End If
        Next
        End If
    End Sub

Jacques
Commenter la réponse de duarep
Messages postés
14322
Date d'inscription
vendredi 14 mars 2003
Dernière intervention
14 décembre 2018
0
Merci
Bonjour,

Un truc qui m'a fait peur (plus que scream et compagnie) :
If Dossier.Contains("System Volume Information") Then
GoTo Saute
End If

PAS DE GOTO dans un code sans que ce soit explicitement justifié !!!
Dans ton cas, un "Continue For" est possible.

Je pense que dans ton cas une procédure récursive serait plus adaptée.

Tes :
ReDim Preserve D3(Nbr + 1)
Laissent penser qu'un collection List(Of T) serait plus adaptée.

Pour gérer les erreurs d'accès, je pense que mettre le Try/Catch en encerclant la boucle
For Each fichier In Directory.GetFiles(Chemin2, Extension1, System.IO.SearchOption.AllDirectories)
Serait plus adapté.



Mon site
Commenter la réponse de NHenry
Messages postés
32
Date d'inscription
samedi 30 mars 2013
Dernière intervention
22 février 2014
0
Merci
En premier, j'ai envoyé par erreur le code que j'ai modififié pour tenter de résoudre le pb
le code objet de ma demande est dans le msg précédent celui ci

Jacques
Commenter la réponse de duarep
Messages postés
14322
Date d'inscription
vendredi 14 mars 2003
Dernière intervention
14 décembre 2018
0
Merci
Bonjour,

D'accord, mais la solution que je propose est la même quand même (je n'ai pris que la partie avec les sous dossiers).

Mon site
Commenter la réponse de NHenry
Messages postés
32
Date d'inscription
samedi 30 mars 2013
Dernière intervention
22 février 2014
0
Merci
Merci pour tes conseils mais je ne vois pas comment placer les catch et autres dans la boucle sans créer vles problèmes que j'ai indiqués plus haut
Jacques
Commenter la réponse de duarep
Messages postés
14322
Date d'inscription
vendredi 14 mars 2003
Dernière intervention
14 décembre 2018
0
Merci
Bonjour,

Le fait de mettre le
For Each fichier In Directory.GetFiles(Chemin, Extension1, System.IO.SearchOption.AllDirectories)

dans un try/catch te permettra de gérer les erreurs d'accès.

Sinon, pour ta liste "D3", à la place d'un tableau de chaine, utilises plutôt une collection List(Of String), ce sera plus optimisé.

Mon site
Commenter la réponse de NHenry
Messages postés
14322
Date d'inscription
vendredi 14 mars 2003
Dernière intervention
14 décembre 2018
0
Merci
Sinon, il faudra que tu fasse toi même l'analyse récursive des dossiers.
Commenter la réponse de NHenry
Messages postés
32
Date d'inscription
samedi 30 mars 2013
Dernière intervention
22 février 2014
0
Merci
Encore merci pour tes conseils

Jacques
Commenter la réponse de duarep

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.