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 et les blocs try-finally aident tous deux à gérer les ressources qui doivent être correctement libérées. L’instruction using offre une manière plus claire et plus concise de garantir 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. Tu peux toujours placer 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 transmettant un nom de fichier, et elle ouvre le fichier en lecture. Elle implémente IDisposable, elle doit donc être correctement fermée après utilisation, ce que using gère précisément pour vous.

Méthodes courantes de StreamReader :

  • ReadToEnd() : lit l’intégralité du fichier sous forme d’une seule chaîne
  • ReadLine() : lit une ligne à la fois et renvoie 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 l’absence d’un fichier :

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
  2. Utilise l’instruction using avec un StreamReader pour lire toutes les lignes du fichier
  3. Renvoie le nombre de lignes du fichier
  4. Si une FileNotFoundException se produit, affiche "File not found" et renvoie -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

Entraînez-vous par vous-même : Compilateur C# en ligne