Soucis de gestion d'Exeption en VB2010

phenX Messages postés 704 Date d'inscription mercredi 4 mai 2005 Statut Membre Dernière intervention 28 août 2012 - 14 août 2012 à 08:47
 Utilisateur anonyme - 24 août 2012 à 16:16
Bonjour,

Je suis en train de faire un gestionnaire de fichiers, dedans il y une fonctionnalité toute simple qui me permet de lister les fichiers de dossiers et de sous-dossiers. Lorsque je met un filtre par extension (uniquement les .jpg par exemple) tout marche très bien, mais lorsque je veux tout (*.*) alors là :

"System.ArgumentExeption:Caractères non conformes dans le chemin d'accès"

J'utilise un Try pour faire ma boucle et je ne sais pas quoi mettre dans le Catch pour gérer cette erreur

[i] Catch ex As Exception
LblPath.Text = ex.ToString
End Try
/i

Si quelqu'un peut m'aider

17 réponses

NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
14 août 2012 à 14:07
Bonjour,

Quel est le code de recherche incriminé ?

Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
Mon site
0
phenX Messages postés 704 Date d'inscription mercredi 4 mai 2005 Statut Membre Dernière intervention 28 août 2012
14 août 2012 à 14:46
Pardon, je n'avais pas vu l'icone.

Le code est justement celui là.
Le code du Try en lui même fonctionne très bien, c'est la gestion de l'exeption sur les caractères non conformes que je n'arrive pas à faire. J'imagihne qu'il faut que je le mette dans le Catch mais c'est tout.

Catch ex As Exception 
LblPath.Text = ex.ToString 
End Try 




------------
Analyses et réflexions politiques sur http://bit.ly/LHou84
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
14 août 2012 à 21:57
Bonjour,

Quel est le chemin qui pose le problème de
"Caractères non conformes dans le chemin d'accès" ?

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
Mon site
0
Utilisateur anonyme
15 août 2012 à 17:37
Bonsoir,

J'utilise un Try pour faire ma boucle

Pour information, tu n'as pas besoin de passer par une boucle pour lister tes fichiers.
Jette un coup d'oeil sur les classes DirectoryInfo, sa méthode GetFiles (sur laquelle tu peux placer tes filtres en paramètres) et FileInfo pour récupérer tes fichiers.
0

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

Posez votre question
Utilisateur anonyme
15 août 2012 à 17:43
Petite erreur de lien pour la méthode GetFiles
0
phenX Messages postés 704 Date d'inscription mercredi 4 mai 2005 Statut Membre Dernière intervention 28 août 2012
16 août 2012 à 08:17
J'utilise bien la méthode GEtFiles, mon problème viens de la gestion de l'Exeption DirectoryNotFoundException


Merci à vous,

Analyses et réflexions politiques sur http://bit.ly/LHou84
0
phenX Messages postés 704 Date d'inscription mercredi 4 mai 2005 Statut Membre Dernière intervention 28 août 2012
16 août 2012 à 08:18
Pardon, je parlais de l'Exeption ArgumentException



------------

Analyses et réflexions politiques sur http://bit.ly/LHou84
0
Utilisateur anonyme
16 août 2012 à 21:24
Le moment est venu de poster le bout de code incriminé. Surtout la partie placée entre 'Try' et 'Catch'. Parce que, finalement, la partie du bloc Catch que tu à posté 2 fois déjà, n'est pas très parlante, et est inutile pour la compréhension de ton problème.
0
phenX Messages postés 704 Date d'inscription mercredi 4 mai 2005 Statut Membre Dernière intervention 28 août 2012
17 août 2012 à 09:22
Oui pardon, le voici :



Try
S:
                        BtValider.Enabled = False
                        monStreamWriter = New StreamWriter(ListePath & "Liste" & Date.Today.Year & Date.Today.Month & Date.Today.Day & ".txt")
                        Dim dossiersTrouvé = Directory.GetDirectories(LblPath.Text)
                        For Each ligneD In dossiersTrouvé
                            monStreamWriter.WriteLine(ligneD)
                        Next
                        Dim fichiersTrouvé = Directory.GetFiles(LblPath.Text, ext, Chk)
                        For Each ligneF In fichiersTrouvé
                            monStreamWriter.WriteLine(ligneF)
                            LigneStreamer = fichiersTrouvé
                        Next
                        monStreamWriter.Close()
                        LblPath.Text = "Opération terminé"
                        LblPath.ForeColor = Color.Green

                    Catch ex As ArgumentException
                        Console.WriteLine("Caractère invalide")
                        monStreamWriter.Close()
                        GoTo S
                    End Try




--------------------
Analyses et réflexions politiques sur
0
Utilisateur anonyme
19 août 2012 à 00:46
1 - Tu ne peux pas mettre un goto dans un bloc try/catch. (code à revoir)
Dim dossiersTrouvé = Directory.GetDirectories(LblPath.Text)
        For Each ligneD In dossiersTrouvé

2 - Tes variables ne sont pas typées (active Option Strict dans les propriétés de ton projet et corrige les erreurs).
3 - Utilise ex.Message pour lire la véritable erreur.
4 - Evite les accents dans les noms des variables.
0
phenX Messages postés 704 Date d'inscription mercredi 4 mai 2005 Statut Membre Dernière intervention 28 août 2012
20 août 2012 à 09:43
Voilà, j'ai corrigé les quelques points cités :

 Try
                    BtValider.Enabled = False
                    monStreamWriter = New StreamWriter(ListePath & "Liste" & Date.Today.Year & Date.Today.Month & Date.Today.Day & ".txt")
                    Dim dossiersTrouve = Directory.GetDirectories(LblPath.Text)
                    For Each ligneD In dossiersTrouve
                        monStreamWriter.WriteLine(ligneD)
                    Next
                    Dim fichiersTrouve = Directory.GetFiles(LblPath.Text, ext, Chk)
                    For Each ligneF In fichiersTrouve
                        monStreamWriter.WriteLine(ligneF)
                        LigneStreamer = fichiersTrouve
                    Next
                    monStreamWriter.Close()
                    LblPath.Text = "Opération terminé"
                    LblPath.ForeColor = Color.Green

                Catch ex As ArgumentException
                    Console.WriteLine(ex.Message)
                End Try


Le programme plante avec cette erreur dans la console :

Une exception de première chance de type 'System.ArgumentException' s'est produite dans mscorlib.dll


Merci,


-------------------------
Analyses et réflexions politiques sur Mon blog
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
20 août 2012 à 21:40
Bonjour,

Il "plante" sur quelle ligne ?

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
Mon site
0
phenX Messages postés 704 Date d'inscription mercredi 4 mai 2005 Statut Membre Dernière intervention 28 août 2012
21 août 2012 à 09:26
Bonjour,

il ne plante pas sur "une ligne" mais sur un passage de boucle.

Comme je l'ai dit plus haut, le soucis viens de la gestion de l'Exception System.ArgumentException, le truc c'est que je ne sais pas comment la gérer.



-------------------------
Analyses et réflexions politiques sur Mon blog
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
22 août 2012 à 20:23
Bonjour,

"mais sur un passage de boucle"
Tu veux dire quoi par cela ?

Quelles sont les valeurs en cause ?

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
Mon site
0
phenX Messages postés 704 Date d'inscription mercredi 4 mai 2005 Statut Membre Dernière intervention 28 août 2012
23 août 2012 à 08:54
En fait lorsqu'il passe là :

Dim fichiersTrouve = Directory.GetFiles(LblPath.Text, ext, Chk)
                    For Each ligneF In fichiersTrouve
                        monStreamWriter.WriteLine(ligneF)
                        LigneStreamer = fichiersTrouve
                    Next


Il plante sur la première ligne avec cette erreur :

Une exception de première chance de type 'System.ArgumentException' s'est produite dans mscorlib.dll

C'est donc à un des passage dans la boucle For Each que ça coince, j'imagine qu'il y a un nom de fichier qui ne lui plait pas. Je cherche donc à gérer cette exeption

-------------------------
Analyses et réflexions politiques sur Mon blog
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
23 août 2012 à 09:16
Bonjour,

L'idéal est de ne pas avoir d'exception, pour comprendre d'où vient le problème tu peux retirer temporairement le Try/Catch et voir ce qu'il ne lui plait pas.

Ensuite, que te retourne le ex.ToString ?

Normalement, tu Catch bien l'exception, je ne vois pas l'objet de la question.

On est pas devant ton écran, on ne peut pas tout savoir.

Mon site
0
Utilisateur anonyme
24 août 2012 à 16:16
Au risque de me répéter, active Option Strict et Option Explicit dans les propriétés de ton projet et corrige les erreurs.
0
Rejoignez-nous