Traitement erreur refus d'accès

Résolu
duarep Messages postés 32 Date d'inscription samedi 30 mars 2013 Statut Membre Dernière intervention 22 février 2014 - 10 avril 2011 à 09:32
duarep Messages postés 32 Date d'inscription samedi 30 mars 2013 Statut Membre 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

18 réponses

NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
10 avril 2011 à 17:43
Bonjour,

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

Mon site
3
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
10 avril 2011 à 13:29
Bonjour,

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

Mon site
0
duarep Messages postés 32 Date d'inscription samedi 30 mars 2013 Statut Membre Dernière intervention 22 février 2014
10 avril 2011 à 15:20
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
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
10 avril 2011 à 15:26
Bonjour,

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

Mon site
0

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

Posez votre question
duarep Messages postés 32 Date d'inscription samedi 30 mars 2013 Statut Membre Dernière intervention 22 février 2014
10 avril 2011 à 16:41
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
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
10 avril 2011 à 16:55
Bonjour,

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

Mon site
0
duarep Messages postés 32 Date d'inscription samedi 30 mars 2013 Statut Membre Dernière intervention 22 février 2014
10 avril 2011 à 17:05
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
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
10 avril 2011 à 17:09
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
0
duarep Messages postés 32 Date d'inscription samedi 30 mars 2013 Statut Membre Dernière intervention 22 février 2014
10 avril 2011 à 17:34
Entre temps, j'ai copié dans un fichier word a télécharger http://duarep.free.fr/download/Provisoire/Fichiers/Button6.zip
Jacques
0
duarep Messages postés 32 Date d'inscription samedi 30 mars 2013 Statut Membre Dernière intervention 22 février 2014
10 avril 2011 à 18:02
    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
0
duarep Messages postés 32 Date d'inscription samedi 30 mars 2013 Statut Membre Dernière intervention 22 février 2014
10 avril 2011 à 18:16
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
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
10 avril 2011 à 18:17
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
0
duarep Messages postés 32 Date d'inscription samedi 30 mars 2013 Statut Membre Dernière intervention 22 février 2014
10 avril 2011 à 18:19
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
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
10 avril 2011 à 18:24
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
0
duarep Messages postés 32 Date d'inscription samedi 30 mars 2013 Statut Membre Dernière intervention 22 février 2014
10 avril 2011 à 18:31
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
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
10 avril 2011 à 18:41
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
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
10 avril 2011 à 18:41
Sinon, il faudra que tu fasse toi même l'analyse récursive des dossiers.
0
duarep Messages postés 32 Date d'inscription samedi 30 mars 2013 Statut Membre Dernière intervention 22 février 2014
10 avril 2011 à 18:57
Encore merci pour tes conseils

Jacques
0
Rejoignez-nous