la manipulation de fichiers texte (VB.Net)

Introduction

La manipulation de fichiers texte peut être fort utile dans la réalisation d’applications .Net qu’elles soient WebForm ou WinForm, il est très fréquent d’avoir besoin de stocker des informations dans un fichier. Ce que nous allons effectuer au cours de l’article est en fait apprendre à lire et écrire des fichiers, effectuer des opérations sur ceux-ci et interagir avec leurs attributs, ce qui implique consultation et modification.

A. Les classes dans le Framework .Net

Une fois de plus le Framework possède toutes les classes nécessaires à la réalisation d’opérations de base, voire un petit peu plus complexes. Nous allons voir rapidement quelles sont ces classes et quelle est leur utilité.

Tout d’abord je précise que l’espace de noms concerné est System.IO, il faudra donc l’importer pour utiliser ses différentes classes. Pour cela il faut ajouter cette ligne de code :

        Imports System.IO

System.IO permet la lecture et l’écriture de fichiers et de flux de données.

Les méthodes qui vont nous être utiles sont fournies par deux classes, qui sont, File et FileInfo. Toutes deux présentent des méthodes similaires à une différence près : elles sont statiques pour la classe File et d’instance pour FileInfo. Concrètement la différence va se voir au niveau de l’écriture de ces méthodes, pour FileInfo il faudra d’abord créer une instance de cette dernière avant de pouvoir employer ses méthodes, ce qui n’est pas le cas pour File, dont les méthodes sont accessibles sans instanciation de la classe elle-même.

Nous allons également utiliser deux autres classes de l’espace de noms System.IO : StreamReader et StreamWriter. Leur rôle est en relation avec leur nom, StreamReader permet, en effet, de lire un flux de caractères depuis un fichier, StreamWriter, vous l’aurez compris, permet l’écriture.

Remarque : Ici nous travaillons avec des fichiers texte, mais le framework .Net offre la possibilité de travailler avec des fichiers binaires (grâce notamment aux classes BinaryReader et BinaryWriter), ainsi qu’au format XML grâce à l’espace de noms System.XML.

B. Lecture et écriture de fichiers texte

La lecture et l’écriture sont bien évidemment les deux opérations majeures dans la manipulation de fichiers texte. Pour cela, il existe un certain nombre de classes et de méthodes qui nous aident à les réaliser. Voyons cela d’un peu plus près.

B-1. La lecture

Code permettant la lecture du contenu d’un fichier texte :

Sub lectureFichier(ByVal fichier As String)
        Try
            ' Création d'une instance de StreamReader pour permettre la lecture de notre fichier
            Dim monStreamReader As StreamReader = New StreamReader(fichier)
            Dim ligne As String
            'Lecture de toutes les lignes et affichage de chacune sur la page
            Do
                ligne = monStreamReader.ReadLine()
                Response.Write(ligne)
                Response.Write("</BR>")
            Loop Until ligne Is Nothing
            'Fermeture du StreamReader (attention très important)
            monStreamReader.Close()
        Catch ex As Exception
            'Code exécuté en cas d'exception
            Response.Write("Une erreur est survenue au cours de la lecture !")
            Response.Write("</BR>")
            Response.Write(ex.Message)
        End Try
End Sub

Appel de la fonction permettant la lecture du fichier, vous pouvez voir qu’on passe le chemin relatif du fichier en paramètre.

lectureFichier("./admin/logs/application.log")

Explication de ce code

L’instanciation du StreamReader

Lors de l’instanciation de cette classe, il est possible de spécifier le codage employé par notre fichier texte, par défaut, il s’agit d’UTF-8. On passe aussi lors de l’instanciation le chemin physique du fichier.

Le Do … Loop 

Cette boucle permet d’extraire ligne après ligne le contenu de notre fichier, et cela grâce à la méthode ReadLine() appliquée à notre StreamReader. Cette méthode permet donc de lire chaque ligne et retourne les données lues sous forme de chaînes. La boucle se poursuit tant qu’il reste une ligne à lire, cela est géré par le Until ligne Is Nothing.

Il existe aussi la méthode Read() qui permet de lire un flux de données sans faire la distinction de lignes. Read() et ReadLine() sont des méthodes de la classe TextReader.

monStreamReader.Close()

Cette méthode est extrêmement importante, il ne faut surtout pas l’oublier. En effet, en cas d’oubli de fermeture de votre StreamReader, vous ne pourrez plus accéder à votre fichier par la suite. Pour retrouver un accès normal au fichier, il faudrait alors redémarrer le processus, vous voyez donc qu’il est très important de ne pas oublier de fermer ce StreamReader.

B-2. L’écriture

Voilà le code permettant d’écrire dans un fichier texte :

Sub ecritureFichier(ByVal fichier As String)
        Try
            'Instanciation du StreamWriter avec passage du nom du fichier 
            Dim monStreamWriter As StreamWriter = New StreamWriter( "admin\logs\" & fichier)
            'Ecriture du texte dans votre fichier
            monStreamWriter.WriteLine("Ma toute première ligne...")
            monStreamWriter.WriteLine("Ma seconde ligne...")
            monStreamWriter.WriteLine("Ma troisième ligne...")
            'Fermeture du StreamWriter (Très important)
            monStreamWriter.Close()
        Catch ex As Exception
            'Code exécuté en cas d'exception
            Response.Write(ex.Message)
        End Try
End Sub

Explication du code

Instanciation du StreamWriter

Nous créons ici une instance, StreamWriter qui permet d’écrire dans un flux, et comme StreamReader, il est possible de spécifier le codage utilisé, par défaut il s’agit ici aussi d’UTF-8. Nous passons le chemin physique du fichier dans le constructeur.

WriteLine()

Ici, la méthode WriteLine nous permet d’écrire dans notre fichier, elle a la particularité d’écrire ligne après ligne, c’est-à-dire qu’à chaque fois qu’on l’appelle, elle ajoute une nouvelle ligne à notre fichier.

Write()

Comme WriteLine, la méthode Write permet d’écrire dans un fichier sauf qu’elle écrit un flux sans se préoccuper des lignes, elle est donc utile quand le retour à la ligne n’est pas souhaité après chaque ajout dans le fichier. Nous ne l’utilisons pas ici, mais je vous l’indique, car elle très utile.

monStreamWriter.Close()

Comme pour le StreamReader, il faut absolument fermer le StreamWriter après utilisation sous peine des mêmes conséquences, à savoir un accès impossible au fichier sans un redémarrage du processus.