Aller au contenu principal

Fichier texte

Un fichier texte est une structure de données contenant des caractères. Chaque ligne du fichier texte se termine par le code de Fin de ligne (Return) et la fin de fichier est indiquée par un code de Fin de fichier. Le fichier se trouve sur un périphérique et il faut établir un lien entre le système d'exploitation et l'application. Ce lien appelé flux d'entrée (In) ou de flux de sortie (Out) permet le transfert d'informations.

Le Package System.IO

Le package IO contient des classes relatives aux fichiers texte pour la lecture/écriture de flux de données et la prise en charge de fichiers et de répertoires. Ce package doit être inclus au début du code source avec l'instruction using System.IO;.

Les classes File et Directory

Ces deux classes offrent des méthodes pour la manipulation de fichiers et de répertoires. Voici quelques méthodes.

MéthodeValeur
de
retour
Description
méthode File.Exists(string path)boolDétermine si le fichier spécifié existe ou non sur le disque.
if( ! File.Exists("nombres.txt"))
{
Console.Writeline("Ce fichier n'existe pas!");
return; // Sortir : impossible de continuer le traitement.
}
méthode Directory.Exists(string path)boolDétermine si le chemin d'accès spécifié réfère à un répertoire existant sur le disque.
if( ! Directory.Exists("Images"))
{
Console.WriteLine("Le répertoire n'existe pas!");
return;
}
méthode Directory.GetFiles(string path)string [ ]Retourne dans un tableau de chaines, le nom complet des fichiers contenus dans le répertoire spécifié.
string [] tabVentes= Directory.GetFiles("ventes");
Si le répertoire ventes contient les 3 fichiers : janvier.txt, fevrier.txt, mars.txt le tableau contiendra les chaines suivantes :
tabVentes[0] <-- "ventes\\janvier.txt"
tabVentes[1] <-- "ventes\\fevrier.txt"
tabVentes[2] <-- "ventes\\mars.txt"
méthode Directory.SetCurrentDirectory (string path)Définit le répertoire de travail actif de l'application avec le répertoire spécifié.
Directory.SetCurrentDirectory("Catégories");
Le répertoire "Catégories" est placé dans le projet sous le répertoire bin\debug.

La classe StreamReader : lecture dans un fichier texte

ConstructeurDescription
méthode StreamReader(string pNomFichier)Initialise une instance de la classe pour le nom de fichier spécifié en paramètre. Le fichier est ouvert en mode Lecture, et le pointeur de lecture au début du fichier est positionné au début du fichier.
StreamReader objFichierALire = new StreamReader("ventes.txt");
Si le fichier spécifié n'existe pas, l'exception FileNotFoundException est levée. Pour éviter cette erreur, il faut vérifier l'existence avec la méthode File.Exists("ventes.txt").
PropriétéTypeDescription
propriété EndOfStreamboolObtient une valeur indiquant si la position actuelle du pointeur de lecture se trouve à la fin du fichier, c'est-à-dire sur le code de Fin de fichier.
while( ! objFichierALire.EndOfStream ) //Tant que ce n'est pas la fin de fichier
{
. . .
}
MéthodeValeur
de
retour
Description
méthode ReadLine()stringRetourne les caractères lus à partir du début de la ligne actuelle jusqu'au code de Fin de ligne (Return).
Après la lecture de la ligne, le pointeur de lecture se trouve au début de la prochaine ligne à lire.
string ligneLue = objFichierALire.ReadLine();
méthode ReadToEnd()stringRetourne les caractères lus de la position actuelle du pointeur jusqu'au code de Fin de fichier. Après la lecture, le pointeur se trouve sur le code de Fin de fichier.
string texteAuComplet = objFichierALire.ReadToEnd();
méthode Close()voidFerme l'objet StreamReader et le flux d'entrée sous-jacent et libère les ressources.
objFichierALire.Close();
Lors de la création de l'objet de lecture, si on inclut using, les ressources sont libérées et il n'est pas nécessaire de fermer l'objet de lecture avec .Close()
using ( StreamReader objFichierALire = new StreamReader ("ventes.txt") )

La classe StreamWriter : écriture dans un fichier texte

ConstructeurDescription
méthode StreamWriter(string pNomFichier)Initialise une instance de la classe pour le nom de fichier spécifié en paramètre. Le fichier est ouvert en mode Écriture et le pointeur de lecture au début du fichier est positionné au début du fichier. Si le fichier n'existe pas, il est créé.
StreamWriter objFichierAEcrire = new StreamWriter("ventes.txt");
méthode StreamWriter(string pNomFichier, bool pAppend)Initialise une nouvelle instance de la classe pour le nom de fichier spécifié en paramètre. Le fichier est ouvert en mode Append (Ajout) si le 2e paramètre est true. Dans ce mode, si le fichier n'existe pas, il est créé et le pointeur de lecture est placé au début du ficher mais s'il existe, le pointeur est placé à la fin du fichier.
StreamWriter objFichierAEcrire = new StreamWriter("ventes.txt", true);
MéthodeValeur
de
retour
Description
méthode WriteLine(string pChaine)voidÉcrit à la position du pointeur de lecture le paramètre pChaine, suivie du code de Fin de ligne.
string uneLigne = "Bonne journée";
objFichierAEcrire.WriteLine(uneLigne);
méthode Write(string pChaine)voidÉcrit à la position du pointeur de lecture, le paramètre pChaine.
string chaine1 = "Bonne ";
string chaine2 = "journée";
objFichierAEcrire.Write(chaine1);
objFichierAEcrire.WriteLine(chaine2);
Ligne obtenue dans le fichier : Bonne journée.
méthode Close()voidFerme l'objet StreamWriter et le flux de sortie sous-jacent et libère les ressources du fichier
objFichierAEcrire.Close();
Lors de la création de l'objet d'écriture, si on inclut using, les ressources sont libérées et il n'est pas nécessaire de fermer l'objet de lecture avec .Close()
using ( StreamWriter objFichierAEcrire = new StreamWriter ("ventes.txt") )

Exemple : Lecture d'un fichier nommé "Autos.txt" pour afficher son contenu sur la console.

// Instancier un objet de lecture.
StreamReader objFichierALire = new StreamReader("Autos.txt");

// Tant qu'il y a des caractères à lire
while (!objFichierALire.EndOfStream)
{
// Lire une ligne du fichier.
string ligneLue = objFichierALire.ReadLine();

// Afficher la ligne lue sur la console.
Console.WriteLine(ligneLue);
}
// Fermer le fichier.
objFichierALire.Close();