Chapitre 5
Chapitre 5
La gestion des fichiers textes
sous Visual basic.Net
Un fichier ?
(cid:1) Un fichier possède des attributs : un nom ; une extension ;
un chemin d'accès ; une taille (en octets) ; une date de
création et une date de dernière modification.
(cid:1) Un fichier a un contenu : une suite ordonnée d'octets, qui
peut représenter n'importe quelle donnée : un
peut représenter n'importe quelle donnée : un
programme informatique, une image, un texte, etc.
(cid:1) Utile pour enregistrer des données simples et qui sont
récupérables même après fermeture du programme
(contrairement aux variables).
117
Types de fichiers
(cid:1) VB.Net fournit 3 types d’accès aux fichiers :
(cid:1) L‘accès séquentiel (fichiers textes)
(cid:1) Lire et écrire des fichiers 'texte' de manière continue
(cid:1) Chaque donnée est enregistrée successivement du début à la fin
(cid:1) Les enregistrements n'ont pas la même longueur, ils sont séparés par un
séparateur (des virgules ou des retours à la ligne).
(cid:1) Pour lire le troisième enregistrement il faut lire avant les 2 premiers.
(cid:1) Pour lire le troisième enregistrement il faut lire avant les 2 premiers.
(cid:1) L’accès aléatoire/direct (Random)
(cid:1) Lire et écrire des fichiers texte ou binaire constitués d'enregistrements
de longueur fixe
(cid:1) On peut avoir directement accès à un enregistrement à partir de son
numéro
(cid:1) Pas de séparateur entre les enregistrements
(cid:1) L‘accès binaire
(cid:1) Lire et écrire dans tous les fichiers un nombre d'octet désiré à une
position désirée (comme l'accès direct en mode octet par octet)
118
Les opérations sur les fichiers textes
(cid:1) La manipulation d’un fichier texte passe par 3 étapes
nécessaires:
1. L’ouverture du fichier
2. Lecture ou écriture
3. Fermeture du fichier
(cid:1) Autres opérations possibles sur les fichiers:
Autres opérations possibles sur les fichiers:
(cid:1) Vérifier l’existence d’un fichier
(cid:1) Déplacer un fichier
(cid:1) Copier un fichier
(cid:1) Effacer un fichier
(cid:1) ...
119
Les opérations sur les fichiers textes
(cid:1) Deux méthodes principales pour gérer les fichiers:
1. Utiliser les classes du namespace System.IO (File,
StreamReader et StreamWriter)
2. Utiliser les fonctions traditionnelles du langage VB (FileOpen,
Input, Write, …)
120
Ouverture/Fermeture d’un fichier texte
(cid:1) FileOpen : pour ouvrir un fichier
(cid:1) FileOpen (numFichier, nomFichier, modeOuverture)
(cid:1) numFichier :
(cid:1) A tout fichier est affecté un numéro unique qui sera utilisé pour indiquer
sur quel fichier pratiquer une opération.
(cid:1) La fonction FreeFile() permet de fournir un numéro de fichier disponible.
(cid:1) nomFichier : le nom du fichier ou son chemin d’accès
(cid:1) nomFichier : le nom du fichier ou son chemin d’accès
(cid:1) modeOuverture :
(cid:1) Lecture (cid:1) OpenMode.Input : ouverture pour lecture
(cid:1) Ecriture (cid:1) OpenMode.Output : ouverture pour écriture (Au
début)
(cid:1) Ajout (cid:1)OpenMode.Append : ouverture pour écriture (à la fin)
(cid:1) FileClose() : pour fermer un fichier
(cid:1)FileClose(numF1[,numF2,...])
121
Lecture d’un fichier texte
(cid:1) Pour lire du texte :
(cid:1) Input : lit du texte (séparateur ",")
Dim var1,var2 as String
FileOpen (1,"test.txt", OpenMode.Input)
Input (1, var1)(cid:1)affecte "ali" à var1
Input (1, var2)(cid:1)affecte "salah" à var2
Input (1, var2)(cid:1)affecte "salah" à var2
(cid:1) LineInput : lit toute une ligne (séparateur "retour à la
ligne")
Dim ch1, ch2 as String
OpenFile (1,"test.txt", OpenMode.Input)
ch1=LineInput (1)(cid:1)affecte "ali,salah,23" à ch1
ch2=LineInput (1)(cid:1)affecte "mohamed,3" à ch2
122
Ecriture dans un fichier texte
(cid:1) Pour écrire du texte :
(cid:1) Print ou PrintLine: écrit du texte sans caractère de
séparation
FileOpen (1,"test.txt", OpenMode.Output)
Print (1, "Gestion des fichiers")
Print (1, "en VB")
Print (1, 2010)
Print(1," : Cours et "," exercices")
PrintLine(1) 'ajoute une line vide
tabulation
donne: Gestion des fichiersen VB 2010 : Cours et exercices
123
Ecriture dans un fichier texte
(cid:1) Pour écrire du texte :
Publicité
(cid:1) Write ou WriteLine : écrit du texte (séparateur
","/retour à la ligne) + met les string entre guillemets,
booléens entre #,
FileOpen (1,"test.txt", OpenMode.Output)
Write (1, "Gestion des fichiers")
Write (1, "Gestion des fichiers")
Write (1, "en VB")
Write (1,2010)
(cid:1)donne: "Gestion des fichiers","en VB",2010
Séparateur décimal qui
dépend des Options
régionales et linguistiques
du panneau de config.
124
Fonctions utiles
(cid:1) Pour avoir la taille du fichier (en octets) :
(cid:1) LOF: donne la taille du fichier en octets
FileOpen (1,"test.txt", OpenMode.Input)
messageBox.show(LOF(1))
(cid:1)Affichera 23
(cid:1) Pour tester l’atteinte de fin de fichier
(cid:1) EOF : prend true si on atteint la fin du fichier et qu’il n’y a
plus rien à lire
FileOpen (1,"test.txt", OpenMode.Input)
messageBox(EOF(1))
(cid:1)Affichera false
125
Exemple
(cid:1) Écrire un programme qui permet de lire soit ligne par
ligne ou tout le fichier nommé "Fich_1.txt" stocké
dans le lecteur C: puis placer son contenu dans une zone
de texte d'une feuille.
126
Exemple
(cid:1) Solution:
(cid:1) Propriétés de TextBox1
(cid:1) Name = TXTfile
(cid:1) MultiLine = True 'affichage sur plusieurs lignes
(cid:1) ScrollBar = vertical 'affichage un ascenseur vertical
(cid:1) Propriétés de Button1
(cid:1) Name = cmdLireTout
(cid:1) Text = Lire tout le fichier
(cid:1) Propriétés de Button2
(cid:1) Name = cmdLireLigne
(cid:1) Text = Lire le fichier ligne par ligne
127
Exemple
Private Sub cmdLireTout_Click(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
cmdLireTout.Click
' Détermine un numéro de fichier valide
Dim Num as Integer = FreeFile ( )
' Ouverture du fichier "Fich_1.txt" sous C: en lecture
' Ouverture du fichier "Fich_1.txt" sous C: en lecture
FileOpen (Num, "C:\Fich_1.txt", OpenMode.Input)
' Affectation dans la propriété Text du contrôle TXTfile de tout le contenu du
fichier
Input (Num, TXTfile.Text)
‘Fermeture du fichier
FileClose (Num)
End Sub
128
Exemple
Private Sub cmdLireLigne_Click (ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
cmdLireLigne.Click
Dim L As String
' Ouverture du fichier "Fich_1.txt"
FileOpen (num, "C:\Fich_1.txt", OpenMode.Input)
' Affectation de tout le contenu du fichier dans la propriété Text du
' Affectation de tout le contenu du fichier dans la propriété Text du
contrôle Txtfile
contrôle Txtfile
Do While Not EOF (num)
L = LineInput (num)
txtfile.Text = txtfile.Text & L & Chr(13) & Chr(10)
' txtfile.Text = Txtfile.Text & L & VbCrLf
Loop
FileClose (num) ' Fermeture du fichier
End Sub
129
Saut de ligne « \n »
Retour chariot « \r »
« \r\n »
Opérations communes sur les fichiers
(cid:1) Ajouter : imports System.IO
(cid:1) File.exists () : lblTrouve1.Text =
File.Exists("image1.gif").ToString( )
Retourne True si le fichier existe, sinon False
(cid:1) File.move() : File.Move("c:\test1.txt", "d:\test2.txt“) déplace
un fichier
(cid:1) File.copy() : File.Copy("test.txt", "d:\test2.txt", True) fait une
(cid:1) File.copy() : File.Copy("test.txt", "d:\test2.txt", True) fait une
copie de test.txt (true permet de remplacer le fichier cible s‘il
existe
(cid:1) File.delete() : File.Delete("d:\test2.txt")
(cid:1) File.ReadAllText() / File.ReadAllLines()
Dim tabLignes() As String
tablignes=File.ReadAllLines("test.txt")
130
Exercice
(cid:1) Écrire le code qui permet de lire un fichier nommé
Fich_1.txt, ligne par ligne, ajouter son contenu dans un
Publicité
second fichier déjà existant nommé Fich_2.txt et
d’afficher le contenu du fichier résultat.
131
La gestion des exceptions
La gestion des exceptions
132
Qu’est-ce qu’une exception ?
(cid:1) Une exception désigne une condition d’erreur ou un
comportement inattendu survenant lors de l’exécution
d’un programme.
(cid:1) Elle exige l’exécution d’un code hors du flux de contrôle
normal.
133
La classe Exception
(cid:1) Le Framework .NET fournit le modèle objet d’exception suivant :
(cid:1) Les classes d’exception vous permettent d’extraire des informations sur
toutes les exceptions rencontrées
(cid:1) Les propriétés de la classe de base Exception vous permettent d’analyser les
exceptions
(cid:1) " Propriétés principales : StackTrace, Message, HelpLink et Source
134
Propriétés de la classe Exception
(cid:1) StackTrace : Répertorie les méthodes appelées menant à
l’exception et vous aide à retrouver l’origine de l’erreur
dans le code.
(cid:1) Message : Renvoie un message texte décrivant l’erreur.
Utilisez cette propriété pour extraire des informations
sur la cause d’une exception.
sur la cause d’une exception.
(cid:1) HelpLink : Permet d’obtenir ou de définir un lien à un
fichier d’aide associé.
(cid:1) Source : Permet d’obtenir ou de définir une chaîne
contenant le nom de l’objet ayant causé l’erreur ou le
nom de l’assembly d’où provient l’exception.
135
La gestion structurée des exceptions
(cid:1) Détecte et répond à des erreurs lors de l’exécution
d’une application
(cid:1) Utilisez l’instruction Try…Catch…Finally pour
encapsuler et protéger des blocs de code pouvant
potentiellement provoquer des erreurs
(cid:1) Chaque bloc possède un ou plusieurs gestionnaires associés
(cid:1) Chaque bloc possède un ou plusieurs gestionnaires associés
(cid:1) Chaque gestionnaire spécifie une forme de condition de filtre
sur le type d’exception qu’il gère
(cid:1) Avantages :
(cid:1) Permet de séparer le code de gestion des erreurs du code de
logique
(cid:1) Facilite la lecture, le débogage et la gestion du code
136
Utilisation de l’instruction Try…Catch
(cid:1) Placez les sections du code susceptibles de lever des
exceptions dans un bloc Try
(cid:1) Gérez les exceptions dans un bloc Catch distinct
(cid:1) Syntaxe
Try
Try
’ Démarre un gestionnaire structuré des exceptions
Catch [optional filter]
’ Ce code est exécuté si les instructions du bloc Try
’ échouent et le filtre de l’instruction Catch est true
End Try ’ Termine un gestionnaire structuré des exceptions
137
Traitement de l’instruction Try.Catch
(cid:1) Le code d’un bloc Try est toujours exécuté.
(cid:1) Si une erreur survient lors de l’exécution d’un code de la
section Try,
(cid:1) on examine chaque instruction Catch dans le gestionnaire des
exceptions jusqu’à ce que le type de l’exception survenue
exceptions jusqu’à ce que le type de l’exception survenue
corresponde au nom de l’exception spécifiée dans l’instruction
Catch,
(cid:1) puis on transfère le contrôle de la première ligne du code vers
l’instruction Catch.
(cid:1) Si aucun bloc Catch n’est trouvé, une erreur survient.
138
Exemple
Try
fs = New FileStream("data.txt", FileMode.Open)
Catch ex As FileNotFoundException
MessageBox.Show("Fichier introuvable")
Catch ex As Exception
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
139
Utilisation du bloc Finally
(cid:1) Bloc de code facultatif qui, s’il est inclu, est toujours exécuté
(cid:1) Placez dans le bloc Finally le code de nettoyage, tel que le code
pour la fermeture de fichiers
(cid:1) Exemple
Try
fs = New FileStream("data.txt", FileMode.Open)
Catch ex As FileNotFoundException
Catch ex As FileNotFoundException
MessageBox.Show("Fichier de données manquant")
Catch ex As Exception
MessageBox.Show(ex.Message)
If Not (fs Is Nothing) Then fs.Close( )
Finally
End Try
140
Lever une exception
Publicité
(cid:1) L’instruction Throw crée une exception que vous pouvez
gérer à l’aide du code de gestion structurée des
exceptions
(cid:1) Exemple
If (day < 1) Or (day > 365) Then
Throw New ArgumentOutOfRangeException( )
Else
End If
...
141
La gestion des fichiers sous vb.net (suite)
La gestion des fichiers sous vb.net (suite)
142
L’espace de noms System.IO
(cid:1) Le namesapce System.IO contient toutes les classes
nécessaire pour la manipulation des fichiers sous vb.net :
(cid:1) La classe FileStream
(cid:1) La classe StreamReader
(cid:1) La classe StreamWriter
(cid:1) La classe StreamWriter
(cid:1) La classe BinaryReader
(cid:1) La classe BinaryWriter
(cid:1) …
143
La classe FileStream
(cid:1) Elle permet d’ouvrir un flux vers un fichier
(cid:1) Syntaxe :
FileStream(nomFichier, FileMode, FileAccess)
(cid:1) nomFichier : le nom du fichier ou son chemin d’accès
(cid:1) nomFichier : le nom du fichier ou son chemin d’accès
(cid:1) FileAccess :Une énumération permettant de préciser le type
d’accès au fichier dont les membres sont :
(cid:1) FileAccess.Read: le contenu du fichier peut être lu.
(cid:1) FileAccess.Write: l’ajout de nouvelles données est permis.
(cid:1) FileAccess.ReadWrite: lecture et écriture simultanée.
144
La classe FileStream
(cid:1) FileMode :
(cid:1) FileMode.Append: Si le fichier existe, les données sont alors
ajoutés à la suite de celles existantes. Si le fichier n’existe pas il sera
crée avant d’y ajouter les données.
(cid:1) FileMode.Create: permet de créer un fichier. Si ce dernier existe, il
sera détruit et remplacer par un nouveau fichier de même nom.
FileMode.CreateNew:
(cid:1) FileMode.CreateNew: permet de créer un fichier. Si ce dernier
existe, alors une erreur est retournée.
existe, alors une erreur est retournée.
(cid:1) FileMode.Open: permet d’ouvrir un fichier. Si ce dernier n’existe
pas, alors une erreur est retournée.
(cid:1) FileMode.OpenOrCreate: Si le fichier existe, il sera ouvert sinon il
sera crée.
(cid:1) FileMode.Truncate: permet de supprimer le contenu du fichier et
de donner la possibilité d’écrire de nouveau. Si ce dernier n’existe pas,
alors une erreur est retournée.
145
La classe StreamReader
(cid:1) Elle permet de lire du texte dans un fichier
(cid:1) La classe StreamReader propose plusieurs stratégies de
lecture:
(cid:1) Ligne par ligne avec la méthode ReadLine.
(cid:1) Le fichier en sa totalité avec la méthode ReadToEnd.
(cid:1) Caractère par caractère avec la méthode Read.
146
La classe StreamReader
(cid:1) Ligne par ligne : La méthode ReadLine permet la lecture d’une
ligne d’un fichier texte.
(cid:1) La méthode Peek permet de dire si on a atteint la fin du fichier
ou non.
(cid:1) Peek retourne -1 si c’est la fin du fichier.
(cid:1) Tout Le Fichier : On peut lire tout le contenu du fichier avec la
(cid:1) Tout Le Fichier : On peut lire tout le contenu du fichier avec la
méthode ReadToEnd.
(cid:1) Cette méthode retourne le contenu du fichier dés la position
courante jusqu’à la fin du fichier.
(cid:1) Caractère par caractère: Si on veut lire le fichier caractère
par caractère, on utilise la méthode Read. Cette méthode
retourne un entier représentant le code du caractère lu.
147
Exemple
(cid:1) lire le fichier caractère par caractère :
Dim x As Integer
Dim ch As String
Dim fs As New FileStream("C:\data.txt", FileMode.Open,
FileAccess.Read)
Dim sr As New StreamReader(fs)
Dim sr As New StreamReader(fs)
While sr.Peek <> -1
x = sr.Read()
ch = Chr(x)
Console.write(ch)
End While
148
La classe StreamWriter
(cid:1) Elle permet d’écrire du texte dans un fichier
(cid:1) on peut utiliser les méthodes write et writeLine
(cid:1) Exemple :
Dim fs As New FileStream("file.txt", FileMode.Create, FileAccess.Write)
Dim sw As New StreamWriter(fs)
Dim sw As New StreamWriter(fs)
sw.WriteLine(“Une première phrase.")
sw.WriteLine(“Une deuxième phrase.")
149
Fermeture d’un fichier
Publicité
(cid:1) Il faut fermer :
(cid:1) Le fichier : nomObjF.close()
(cid:1) nomObjF : objet StreamReader/StreamWriter
(cid:1) Le flux de données : nomObjFS.close()
(cid:1) nomObjFS : objet FileStream
150
La classe BinaryReader
(cid:1) Cette classe permet de lire des données binaires ou des
flux d’objets.
(cid:1) Elle dispose d’un certains nombre de méthodes comme :
(cid:1) ReadString : la lecture d’une chaine de caractères
(cid:1) ReadBoolean : la lecture d’un Boolean
(cid:1) ReadInt32 : La lecture d’un Integer
(cid:1) ReadDouble : La lecture d’un réel
(cid:1) …
151
Exemple
Try
br = New BinaryReader(New FileStream("mydata", FileMode.Open))
i = br.ReadInt32()
Console.WriteLine("Donnée de type Integer : {0}", i)
d = br.ReadDouble()
Console.WriteLine("Donnée de type Double : {0}", d)
b = br.ReadBoolean()
b = br.ReadBoolean()
Console.WriteLine("Donnée de type Boolean : {0}", b)
s = br.ReadString()
Console.WriteLine("Donnée de type String : {0}", s)
Catch e As IOException
Console.WriteLine(e.Message + vbCrlf+ " La lecture du fichier est impossible.")
End Try
br.Close()
152
La classe BinaryWriter
(cid:1) Cette classe permet l’écriture des données binaires ou
des flux d’objets.
(cid:1) Elle dispose d’un certains nombre de méthodes comme :
(cid:1) Write : l’écriture des données dans le fichier.
(cid:1) Seek : Permet de déplacer le curseur dans le fichier.
(cid:1) Flush : vide le tampon dans le fichier binaire.
(cid:1) Close : La fermeture du flux.
(cid:1) …
153
Exemple
Dim wS As FileStream
Try
wS = New FileStream("c:\Exemple.dat", FileMode.Create)
Dim wB As New BinaryWriter(wS)
For each x in lstBox1.Items
wB.Write (x)
wB.Write (x)
Next
wB.Close()
Catch ex As Exception
MessagBox.show(ex.ToString)
End Try
154
Exercice(1/3)
(cid:1) On dispose d’un fichier texte de synonymes :
...
dédicace: autographe/hommage/consécration/invocation/envoi/
dédicacer: dédier/signer/
dédier: consacrer/vouer/dédicacer/offrir/
dédire: reprendre/revenir/démentir/contredire/désavouer/
dédire: reprendre/revenir/démentir/contredire/désavouer/
dédit:
dédite: reniée/révoquée/
dédommagement: compensation/
(cid:1) On veut créer une application VB.Net dont l’interface en
cours d’exécution est donnée par la figure suivante :
155
Exercice(2/3)
156
Exercice(3/3)
(cid:1) L’utilisateur doit cliquer sur le bouton Parcourir pour
ouvrir la boîte de dialogue Ouvrir et ensuite choisir un
fichier. Pour afficher cette boîte, on doit utiliser l’objet
OpenFileDialog.
(cid:1) Lister les contrôles (en indiquant leurs propriétés principales
Lister les contrôles (en indiquant leurs propriétés principales
et leurs valeurs).
(cid:1) Ecrire les événements nécessaires (Contrôle de saisie et
traitement).
157
Exercice-Annexe
(cid:1) OpenFileDialog()
Dim openFile As New OpenFileDialog()
openFile.FileName = ""
openFile.Filter = "Fichier texte (.txt)|.txt"
openFile.ShowDialog()
txtFileName.Text = openFile.FileName
txtFileName.Text = openFile.FileName
(cid:1) Dim S as String
(cid:1) S.Contains(ch as String): retourne true si la chaine ch existe dans S
(cid:1) S. Substring(startIndex as integer): extrait de S la sous chaîne à
partir de la position donnée
(cid:1) S. Split(separateur as Char) : retourne un tableau de chaîne
contenant les sous chaînes de S délimitées par le séparateur
donné
158