Lire efficacement des fichiers texte ligne par ligne est une compétence cruciale pour tout développeur C#. Que vous traitiez des journaux, analysiez des fichiers de configuration ou des ensembles de données, la méthode que vous choisissez peut avoir un impact significatif sur les performances et l’utilisation des ressources. Cet article explore trois approches courantes, en soulignant leurs forces et leurs faiblesses pour vous aider à sélectionner la technique optimale pour vos besoins spécifiques.
Table des matières
- Utilisation de
File.ReadLines()
- Utilisation de
File.ReadAllLines()
- Utilisation de
StreamReader.ReadLine()
- Choisir la bonne méthode
Utilisation de File.ReadLines()
La méthode File.ReadLines()
est généralement l’option la plus efficace et la plus pratique, surtout pour les fichiers volumineux. Elle renvoie un IEnumerable
, ce qui signifie qu’elle traite le fichier ligne par ligne sans charger l’intégralité du contenu en mémoire à la fois. Ce chargement différé empêche les erreurs potentielles de type OutOfMemoryException
lors du traitement d’ensembles de données massifs.
using System;
using System.IO;
using System.Linq;
public class ReadLinesExample
{
public static void Main(string[] args)
{
string filePath = "myFile.txt";
try
{
foreach (string line in File.ReadLines(filePath))
{
Console.WriteLine(line);
//Traiter chaque ligne ici
}
}
catch (FileNotFoundException)
{
Console.WriteLine($"Fichier introuvable : {filePath}");
}
catch (Exception ex)
{
Console.WriteLine($"Une erreur s'est produite : {ex.Message}");
}
}
}
Utilisation de File.ReadAllLines()
File.ReadAllLines()
offre une syntaxe plus simple, lisant toutes les lignes dans un tableau de chaînes. Cependant, cette approche charge l’intégralité du fichier en mémoire, ce qui la rend inefficace et potentiellement problématique pour les fichiers volumineux. Elle est mieux adaptée aux fichiers plus petits où la consommation de mémoire n’est pas une préoccupation majeure.
using System;
using System.IO;
public class ReadAllLinesExample
{
public static void Main(string[] args)
{
string filePath = "myFile.txt";
try
{
string[] lines = File.ReadAllLines(filePath);
foreach (string line in lines)
{
Console.WriteLine(line);
//Traiter chaque ligne ici
}
}
catch (FileNotFoundException)
{
Console.WriteLine($"Fichier introuvable : {filePath}");
}
catch (Exception ex)
{
Console.WriteLine($"Une erreur s'est produite : {ex.Message}");
}
}
}
Utilisation de StreamReader.ReadLine()
StreamReader.ReadLine()
offre le contrôle le plus granulaire. Vous lisez une ligne à la fois à l’aide d’une boucle, permettant un traitement personnalisé de chaque ligne avant de lire la suivante. Cette méthode nécessite une gestion explicite des ressources à l’aide d’une instruction using
pour garantir une élimination correcte du StreamReader
.
using System;
using System.IO;
public class StreamReaderExample
{
public static void Main(string[] args)
{
string filePath = "myFile.txt";
try
{
using (StreamReader reader = new StreamReader(filePath))
{
string line;
while ((line = reader.ReadLine()) != null)
{
Console.WriteLine(line);
//Traiter chaque ligne ici
}
}
}
catch (FileNotFoundException)
{
Console.WriteLine($"Fichier introuvable : {filePath}");
}
catch (Exception ex)
{
Console.WriteLine($"Une erreur s'est produite : {ex.Message}");
}
}
}
Choisir la bonne méthode
Pour la plupart des scénarios, en particulier lorsqu’il s’agit de fichiers volumineux, File.ReadLines()
est l’approche recommandée en raison de son efficacité et de sa facilité d’utilisation. File.ReadAllLines()
convient uniquement aux fichiers plus petits. StreamReader.ReadLine()
offre plus de contrôle mais exige une gestion plus attentive des ressources.
N’oubliez pas d’inclure toujours une gestion robuste des erreurs pour gérer correctement les exceptions potentielles telles que les erreurs de fichier introuvable.