begin process at 2012 02 11 18:34:11
  Trouver un code source :
 
dans
 
Accueil > 

Tutoriels

 > 

Fichiers / Disque

 > GESTION DES EXCEPTION + LECTURE FICHIER + DIRECTIVE PRÉCOMPILATION

GESTION DES EXCEPTION + LECTURE FICHIER + DIRECTIVE PRÉCOMPILATION


 Information sur le tutoriel

Note :
Aucune note


 Description

Ce tutorial explique comment gérer les exceptions au travers d'un exemple simple : la lecture d'un fichier texte.
Une petite partie concerne aussi les directives de pré compilation (de façon très simple).

Tutorial

La source suivante est relativement simple (a destination de ceux qui commencent en c#), mais j'ai jugé utile de la poster car ce que j'ai vu sur le site n'est pas forcément complet sur certains points.

  1. La gestion des exceptions :
    La source "http://csharpfr.com/codes/TRY-CATCH-FINALLY_11382.aspx" met en avant comment gérer des exceptions, mais plusieurs points peuvent être précisés :
      1. Ce qui n'est pas dit, c'est que l'on peut faire plusieurs catch dans un try. Il faut cependant penser à les organiser du plus précis au plus générique. Ici, on a la gestion des erreurs pour l'ouverture d'un fichier. FileNotFoundException dérive de IOException, qui dérive de la classe Exception. Donc FileNotFoundException est plus "précis" que Exception, et doit être mis en premier, car une fois que l'on est passé dans un catch, on passe directement au finally.  Si le catch Exception était avant le catch FileNotFoundException, en cas de fichier non présent sur le disque, on passerais dans le catch exception, puis dans le finally, sans passer dans le catch FileNotFoundException.
        Note : On passe toujours dans le finally, qu'il y ait une exception levée ou non.
      2. Il n'est pas non plus nécessaire de déclarer une variable contenant l'exception. Ici, vous avez deux catch. Pour le FileNotFoundException, on ne déclare pas de variable pour stocker l'erreur. Par contre, on en déclare une dans le catch Exception (le catch générique, en quelque sorte), de sorte que l'on puisse afficher le problème.
      3. Vous pouvez utiliser la propriété StackTrace de l'exception qui a été levée. Celle-ci vous permet de voir quels appels de méthodes ont été effectués avant que le plantage survienne. cela peut-être bien pratique en débuggage.
  2. La lecture d'un fichier
    La source "http://csharpfr.com/codes/LECTURE-ECRITURE-DANS-FICHIER_11558.aspx" explique comment lire un fichier, mais ne gère pas les exceptions. Un test est fait pour savoir si le fichier que l'on tente de lire existe, mais même si le fichier existe, on est jamais assuré de pouvoir le lire (problème de droits, problème de verrouillage par windows, problème de lecture matériel, ...). Je vous propose donc une méthode de lecture de fichier que je considère plus propre (à mon humble avis), car gérant mieux les problèmes.
    Note : Le FileStream est déclaré avant le try pour une question de portée de variables. Si je déclare mon FileStream dans le bloc try, c'est à dire entre le "try{" et le "}catch", alors mon FileStream ne sera pas accessible pour la fermeture du fichier, dans le finally. La portée de la variable ne s'étendrait qu'au try (mais pas aux catch, ni au finally).
    De plus, si l'ouverture du fichier échoue, le constructeur de FileStream retourne null. Dans le finally, nous somme donc obligés de valider un point, si fs vaut null c'est qu'il y a eu un problème, et donc on ne ferme pas le flux du fichier. Dans le cas inverse, on ferme les vannes.
  3. Les directives de pré compilation
    J'en profite pour vous coller un petit #if DEBUG... Celui-ci permet de savoir si la variable de pré compilation nommée DEBUG est déclarée. Elle l'est si l'IDE est en mode debug. Lors de la distribution de la version "Release" de l'application, DEBUG ne fera plus partie des variables de pré compilation, ce qui veut dire qu'en cas d'erreur en mode release, on affiche pas le stack trace dans le messagebox.

Le code en question :

 

 

FileStream fs = null ;

try {

     fs = new FileStream ( "c:\\monFichier.txt" , FileMode . Open );

     StreamReader reader = new StreamReader ( fs );

     string contenuFichier = reader . ReadToEnd ();

     MessageBox . Show ( contenuFichier );

} catch ( FileNotFoundException ){

     MessageBox . Show ( "Le fichier que vous avez tenté d'ouvrir n'existe pas" );

} catch ( Exception ex ){

     string erreur = "Une erreur est survenue lors de l'ouverture du fichier\n" + ex . Message ;

     #if DEBUG

     erreur += "\n\n" + ex . StackTrace ;

     #endif

     MessageBox . Show ( erreur );

} finally {

     if ( fs != null ) fs . Close ();

}

 

Commentaires

Commentaire de Ethan le 26/06/2009 20:17:15

Salut, je trouve le code super simple et les explications super claires merci.

Commentaire de yoannd le 29/06/2009 11:08:50

merci pour ton commentaire :)

Commentaire de Anyhouwa le 18/05/2011 19:37:28

Pour une biginner c parfait merci pour l'exemple

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,187 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales