Contenu du cours
C# au-delà des Bases
C# au-delà des Bases
Lecture des Fichiers à l'Aide de StreamReader
Nous pouvons ouvrir et lire des fichiers en utilisant le langage de programmation C#.
Pour lire un fichier, nous créons un nouvel objet StreamReader
. L'objet StreamReader
prend en entrée le chemin du fichier.
index
StreamReader fileVarName = new StreamReader(fullPath);
Ici, fileVarName
représente le nom de la variable dans laquelle nous allons stocker l'objet StreamReader, et fullPath
est censé être le chemin complet du fichier sous forme de chaîne de caractères.
Par exemple, nous voulons ouvrir un fichier "text.txt" sur le Bureau qui a le chemin C:/Users/Admin/Desktop/text.txt
:
index
StreamReader textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt");
Considérez que le fichier text.txt
a le contenu suivant :
text
This is some example text
Un objet StreamReader
a une méthode ReadLine
qui lit une ligne du fichier et la renvoie :
index
var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt"); string line = textFile.ReadLine(); Console.WriteLine(line);
Sortie :
La méthode ReadLine
déplace automatiquement le curseur à la ligne suivante, donc lorsqu'elle est appelée à nouveau, elle lit la ligne suivante s'il y en a une, sinon elle retourne simplement null
(rien) :
index
var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt"); Console.WriteLine(textFile.ReadLine()); // This Console.WriteLine(textFile.ReadLine()); // is Console.WriteLine(textFile.ReadLine()); // some Console.WriteLine(textFile.ReadLine()); // example Console.WriteLine(textFile.ReadLine()); // text Console.WriteLine(textFile.ReadLine()); // NULL
Sortie :
Pour lire toutes les lignes d'un fichier, nous pouvons utiliser la boucle while
avec une condition qui vérifie si la ligne suivante est null
ou non. Voici une manière simple de le faire :
index
var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt"); string line = textFile.ReadLine(); while(line != null) { Console.WriteLine(line); line = textFile.ReadLine(); }
Sortie :
Nous pouvons rendre le code ci-dessus un peu plus propre en utilisant une astuce, pour cela, examinons les instructions d'affectation. Une instruction d'affectation a également une valeur de retour, qui est la valeur qui est assignée. Cela peut être compris avec un exemple :
index
int a; Console.WriteLine(a = 7);
Sortie :
Il affiche 7
parce que l'instruction a = 7
retourne 7
, qui est la valeur assignée à a
.
Nous pouvons utiliser cette information pour faire des choses créatives comme assigner la même valeur à plusieurs variables dans une seule instruction :
index
int a = 1; int b = 1; int c = 1; a = b = c = 9; Console.WriteLine(a); Console.WriteLine(b); Console.WriteLine(c);
Sortie :
En utilisant ces informations, nous pouvons modifier le code de lecture de fichier pour le rendre plus court en supprimant le code inutile :
index
var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt"); string line; while((line = textFile.ReadLine()) != null) { Console.WriteLine(line); }
À l'intérieur de la condition, nous avons d'abord utilisé une instruction d'affectation line = textFile.ReadLine()
qui met automatiquement à jour la variable line
puis vérifie si elle est nulle à partir de la valeur de retour de l'instruction.
Après avoir lu le fichier, nous devons également le fermer en utilisant la méthode Close
, sinon cela peut potentiellement causer des fuites de mémoire ou le fichier peut être verrouillé et devenir inaccessible depuis d'autres endroits tant que le programme est en cours d'exécution.
Le code final ressemblera à ceci :
index
var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt"); string line; while ((line = textFile.ReadLine()) != null) { Console.WriteLine(line); } textFile.Close();
Merci pour vos commentaires !