Chapter 5: File Management in Visual Basic .Net

Page 1 sur 43Lecteur de document UniversityLib

Chapter 5: File Management in Visual Basic .Net

Programming in Visual Basic .Net · course

Voir tous les documents en gestion et économie

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