Menu
Coddy logo textTech

Using vs Try-Finally

Fait partie de la section Logique & Flux du Journey C# de Coddy — leçon 28 sur 66.

Les instructions using tout comme les blocs try-finally aident à gérer les ressources qui doivent être correctement libérées. L'instruction using offre une manière plus propre et plus concise de s'assurer que les objets IDisposable sont correctement nettoyés.

Remarque : using remplace le modèle try-finally pour la libération des ressources — il ne remplace pas try-catch. Vous pouvez toujours envelopper un bloc using à l'intérieur d'un try-catch pour gérer les exceptions.

Examinons d'abord une approche try-finally :

StreamReader reader = null;
try
{
    reader = new StreamReader("file.txt");
    string content = reader.ReadToEnd();
    Console.WriteLine(content);
}
finally
{
    if (reader != null)
    {
        reader.Dispose();
    }
}

L'instruction using simplifie ce code :

using (StreamReader reader = new StreamReader("file.txt"))
{
    string content = reader.ReadToEnd();
    Console.WriteLine(content);
}

L'instruction using appelle automatiquement Dispose() lorsque le bloc se termine, même si une exception se produit.

Qu'est-ce que StreamReader ?
StreamReader est une classe utilisée pour lire du texte à partir de fichiers. Vous en créez une en passant un nom de fichier, et elle ouvre le fichier pour la lecture. Elle implémente IDisposable, elle doit donc être correctement fermée après utilisation — ce qui est exactement ce que using gère pour vous.

Méthodes courantes de StreamReader :

  • ReadToEnd() — lit l'intégralité du fichier sous forme d'une seule chaîne de caractères
  • ReadLine() — lit une ligne à la fois, retourne null lorsque la fin du fichier est atteinte

Pour compter les lignes d'un fichier, vous pouvez utiliser une boucle ReadLine() :

using (StreamReader reader = new StreamReader("file.txt"))
{
    int lineCount = 0;
    while (reader.ReadLine() != null)
    {
        lineCount++;
    }
    Console.WriteLine(lineCount);
}

Vous pouvez également combiner using avec try-catch pour gérer les exceptions comme un fichier manquant :

try
{
    using (StreamReader reader = new StreamReader("file.txt"))
    {
        int lineCount = 0;
        while (reader.ReadLine() != null)
        {
            lineCount++;
        }
        Console.WriteLine(lineCount);
    }
}
catch (FileNotFoundException)
{
    Console.WriteLine("File not found");
}
challenge icon

Défi

Facile

Créez une méthode nommée processFile qui :

  1. Prend un nom de fichier comme paramètre de type chaîne de caractères
  2. Utilise l'instruction using avec un StreamReader pour lire toutes les lignes du fichier
  3. Retourne le nombre de lignes dans le fichier
  4. Si une FileNotFoundException se produit, affiche "File not found" et retourne -1

Essayez vous-même

using System;
using System.IO;

class ProcessFile
{
    public static int processFile(string filename)
    {
        // Écrivez votre code ici
    }
}
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Logique & Flux