Vous êtes sur la page 1sur 25

 Accès au système de fichier

 Lecture et écriture des fichiers en utilisant


les flots
 Manipuler les Fichiers
 Lire à partir ou écrire vers les Fichiers
 Gérer les Dossiers
 Gérer les chemins
 Utiliser les boîtes de Dialogue communes sur le
système de fichier
Travailler sur des fichiers est une nécessité pour beaucoup d’applications

L’espace de noms System.IO contient beaucoup de classes qui simplifient les


actions sur le système de fichiers, comme les classes File et FileInfo

la classe File contient: la classe FileInfo contient :

Copy() CopyTo()

Create() Delete()

Delete() Length

Exists() Open()
Question

Question: Dans un programme en cours d’exécution, vous utilisez


des fichiers comme mécanisme de stockage temporaire des
données. En fin d’exécution vous voulez être sûr que le fichier
existe avant de le supprimer. Quelle est la façon la plus simple de
le faire?
La Classe File
La classe File est une classe utilitaire qui enveloppe diverses fonctions dédiées
aux fichiers. Ces fonctions sont exposées à travers des méthodes statiques. Le
tableau suivant décrit quelques unes des méthodes clés que la classe expose et
donne des exemples d’utilisation.

Méthode Description Code exemple


AppendAllText Permet d’ouvrir un fichier string repFic ="...";
existant et d’ajouter du string contenuFichier ="...";
texte à ce fichier, puis de File.AppendAllText(repFic,contenuFichier);
fermer le fichier, le tout
en une seule opération.
Copy Copie un fichier vers un string fichierSource ="...";
autre emplacement. string fichierCible = "...";
bool ecraser = false;
File.Copy(fichierSource,fichierCible,ecraser);
Méthode Description Code exemple

Create Crée un fichier dans le string repFic ="...";


système de fichier La int tailleTampon = 128;
méthode Create renvoie FileStream fichier =File.Create(repFic,
un objet FileStream. tailleTampon, FileOptions.None);

Delete Supprime un fichier string repFic ="...";


File.Delete(repFic);

Exists Détermine si un fichier string repFic = "...";


existe ou non. bool existe =File.Exists(repFic);

GetCreationTime Retourne la date de string repFic ="...";


création d’un fichier. DateTime dateCreation =
File.GetCreationTime(repFic);
GetLastAccessTime Retourne la date de string repFic ="...";
dernier accès à un DateTime dateCreation =
fichier. File.GetLastAccessTime(repFic);
Méthode Description Code exemple

Move Déplace un fichier vers un autre string fichierSource ="...";


emplacement ou renomme un string fichierCible = "...";
fichier. File.Move(fichierSource, fichierCible);

ReadAllText Permet de lire tout le texte d’un string repFic = "...";


fichier dans une variable string. string contenuFichier =
File.ReadAllText(repFic);

SetCreationTime Fixe la date de création d’un string repFic ="...";


fichier File.SetCreationTime(repFic,DateTime.Now);

SetLastAccessTime Fixe la date de dernier accès à un string repFic ="...";


fichier. File.SetLastAccessTime (
repFic,DateTime.Now);
WriteAllText Permet de créer un fichier , string repFic ="...";
d’ajouter du texte à ce fichier, string contenuFichier = "...";
puis de fermer le fichier, le tout en File.WriteAllText(repFic, contenuFichier);
une seule opération.
La classe FileInfo fournit plusieurs propriétés et méthodes d’instance qui permettent
de créer, copier, déplacer et traiter le contenu des fichiers. Pour créer une
instance de la classe FileInfo, indiquer le dossier d’un fichier donné. Ex Créer un
objet FileInfo pour gérer le fichier fichier.txt dans le dossier C:\Temp.
string repFic = @"C:\Temp\fichier.txt";
FileInfo fichier = new FileInfo(repFic);
On peut utiliser ensuite l’objet FileInfo comme enveloppe pour le fichier, pour
exposer les données par le biais de propriétés et méthodes. On peut aussi l’utiliser
pour créer de nouveaux fichiers.
Le tableau suivant décrit quelques unes des méthodes clés et propriétés de FileInfo,
et donne des exemples d’utilisation.
.
Méthode Description Code exemple
CreationTime permet de lire ou fixer la string repFic = "...";
(propriété) date de création d’un FileInfo fichier = new FileInfo(repFic);
fichier donné. fichier.CreationTime = DateTime.Now; ...
DateTime dateCreation = fichier.CreationTime;

CopyTo Copie un fichier existant string repFic = "...";


(méthode) vers un autre emplacement. FileInfo fichier = new FileInfo(repFic);
string dossierDest = "...";
fichier.CopyTo(dossierDest);
Membre Description Exemple de code

Delete Supprime un fichier. string repFic = "...";


(méthode) FileInfo fichier = new FileInfo(repFic);
fichier.Delete();
DirectoryName Donne le nom du répertoire qui string repFic = "...";
(propriété) contient le fichier. FileInfo fichier = new FileInfo(repFic);
string chemin= fichier.DirectoryName
Exists Permet de savoir si le fichier string repFic = "...";
(propriété) existe ou non. FileInfo fichier = new FileInfo(repFic);
bool existe =fichier.Exists;
Extension Contient l’extension du fichier. string repFic = "...";
(propriété) FileInfo fichier = new FileInfo(repFic);
string ext = fichier.Extension;
Length Donne la taille du fichier en string repFic = "...";
(propriété) octets FileInfo fichier = new FileInfo(repFic);
long tailleFichier = fichier.Length;
Name (propriété) Donne le nom du fichier string repFic = "...";
FileInfo fichier = new FileInfo(repFic);
string nom = fichier.Name;
Open (méthode) Ouvre un fichier . string repFic = "...";
La méthode Open renvoie un FileInfo fichier = new FileInfo(repFic);
objet FileStream . FileStream flot =
Lecture des fichiers
string repFic= "fichier.txt";
...
byte[] donnees = File.ReadAllBytes(repFic); // Données binaires.
string[] lignes = File.ReadAllLines(repFic); // Lignes du fichier.
string donnees = File.ReadAllText(repFic); // Fichier entier.

Ecriture des fichiers

string repFic= "fichier.txt";


...
string[] lignesFichier = {"Ligne 1", "Ligne 2", "Ligne 3"};
File.AppendAllLines(repFic, lignesFichier); // Ajouter lignes.
File.WriteAllLines(repFic, lignesFichier); // Ecrire lignes au nouveau fichier.
...
string contenuFichier = “ Texte contenu dans le fichier...“;
File.AppendAllText(repFic, contenuFichier); // Ajouter le texte dans un fichier
File.WriteAllText(repFic, contenuFichier); // Ecrire le texte dans un nouveau fichier.
Question

Question: Vous avez intégré une logique qui gère les exceptions
dans votre application. Vous prévoyez dans cette logique de
stocker les détails de ces exceptions dans un fichier log. Vous
prévoyez de le faire en écrivant une variable de type string qui
conserve le contenu précédent du fichier. Quelle méthode allez-
vous utiliser?
L’espace de nom System.IO contient les classes Directory et
DirectoryInfo qui simplifient les accès aux répertoires.
Classe Directory
string chemin= @"D:\Asse\C#\Esp_Séminaire\ConsoleApplication1";
...
Directory.CreateDirectory(chemin);
Directory.Delete(chemin);
string[] repertoires = Directory.GetDirectories(chemin);
string[] fichiers = Directory.GetFiles(chemin);

DirectoryInfo class
string chemin= @" C:\Utilisateurs\ehod\Telechargements ";
DirectoryInfo rep = new DirectoryInfo(chemin);
...
bool exists = rep.Exists;
DirectoryInfo[] reps = rep.GetDirectories();
FileInfo[] fichiers = reps.GetFiles();
string nomComplet = rep.FullName;
L’espace de nom System.IO contient la classe Path, qui permet de créer
et de manipuler des chemins, de façon indépendante du système de
fichiers sous-jacent.

La classe Path class contient les méthodes :

GetDirectoryName()

GetExtension()

GetFileName()

GetFileNameWithoutExtension()

GetRandomFileName()
L’espace de nom Microsoft.Win32 contient les classes OpenFileDialog et
SaveFileDialog qui invitent les utilisateurs à sélectionner le chemin des fichiers

Classe OpenFileDialog

OpenFileDialog selOuvrir = new OpenFileDialog(); // Créer instance.


selOuvrir.Title = « Rechercher un fichier à ouvrir"; // Renseigner les
selOuvrir.Filter = "Word (*.doc) |*.doc;"; // propriétés.
selOuvrir.ShowDialog(); // Afficher dialogue sélection.
string selectedFileName = selOuvrir.FileName; // Lire chemin sélectionné .

Classe SaveFileDialog

SaveFileDialog selSauve = new SaveFileDialog(); // Créer instance.


selSauve.DefaultExt = "doc"; // Renseigner les
selSauve.OverwritePrompt = true; // propriétés.
selSauve.ShowDialog(); // Afficher dialogue sélection.
string selectedFileName = selSauve.FileName ; // Lire chemin sélectionné .
 Qu’est-ce qu’un flot?
 Lecture écriture données binaires
 Lecture écriture données textes
 Lecture écriture types de données
Primitifs
Un flot ou flux est un mécanisme qui permet de traiter les données par
blocs de taille optimisée pour le traitement en vue.

0100011

1110010

1010010

Fichier Source Application Référentiel


Question

Question: Quels bénéfices procurent le découpage de fichiers en


flots?
FileStream fichierSource = new FileStream(repFichierSource);
BinaryReader lecteur = new BinaryReader(fichierSource);
int position = 0;
int longueur = (int)lecteur.BaseStream.Length;
byte[] tabDonnees = new byte[longueur];
int caractereLu;
while ((caractereLu = lecteur.Read()) != -1)
{
tabDonnees[position] = (byte)caractereLu;
position += sizeof(byte);
} BinaryReader class
lecteur.Close();
fichierSource.Close();

byte[] tabDonnees = { 1, 4, 6, 7, 12, 33, 26, 98, 82, 101 };


FileStream fichierCible = new FileStream(repFichierdestination);
BinaryWriter scribe = new BinaryWriter(fichierCible);
foreach (byte data in tabDonnees)
{
scribe.Write(data);
}
scribe.Close();
BinaryWriter class
fichierCible.Close();
FileStream fichierSource = new FileStream(repFichierSource);
StreamReader lecteur = new StreamReader(fichierSource);
StringBuilder fileContents = new StringBuilder();
while (lecteur.Peek() != -1)
{
fileContents.Append((char)lecteur.Read());
}
string data = fileContents.ToString();
lecteur.Close(); classe StreamReader
fichierSource.Close();

FileStream fichierCible = new FileStream(“repFichierCible");


StreamWriter scribe = new StreamWriter(fichierCible);

scribe.WriteLine("Ce texte sera écrit dans le fichier");

scribe.Close();
fichierCible.Close(); classe StreamWriter
bool booleen = lecteur.ReadBoolean();
byte caractere = lecteur.ReadByte();
byte[] tableauCaracteres = lecteur.ReadBytes(4);
char caractere = lecteur.ReadChar(); Classe BinaryReader
...

bool booleen = true;


scribe.Write(booleen);

byte caractere = 1;
scribe.Write(caractere);

byte[] tableauCaracteres = { 1, 4, 6, 8 };
scribe.Write(tableauCaracteres);

char caractere = 'a'; Classe BinaryWriter


scribe.Write(caractere);
...
• Exercice 1: Réalisation d’un Editeur de texte simple

• Exercice 2: Permettre à l’éditeur de texte de reconnaitre les codes de


caractère XML

Estimated time: 45 minutes


Review Questions
• Explain the purpose of the File.Load and File.Save static
methods.
• You have a file that contains text. You want to read the file one
character at a time. Which method of the StreamReader class
would you use?
• Question: You are creating a filter that enables users to
browse files by extension. To start with, you need to get the
extensions of each file and then run some logic depending on
the result. You also want to display the file name including the
extension in a list. Which methods would you use to query the
files?
• Answer: The GetExtension and GetFileName methods.

• Question: You have almost completed your implementation of a


text editor, and the final step is to get users to browse to a
save location, and prompt them for a file name. What class
would you use and how would you use it?
Answer: You would use the SaveFileDialog class in the following
way:
1. Create an instance of the SaveFileDialog class.
2. Set any properties to customize its behavior.
3. Call the ShowDialog method to show the dialog box.
Use the result returned in the FileName property.
Question: What do you think are the benefits of streaming
data?
Answer: Answers should include:
• The ability to read and write large amounts of data without
consuming resources such as memory and network bandwidth.
• Not needing to load the entire amount of data into memory.
Enabling your application to handle any amount of data,
regardless of size.
 Question: Why is it important to close streams
when you have finished using them?
 Answer: To release any file handles, and flush data
to the underlying streams.
 Question: You want to write a series of strings to
a text file, and add a line break after each string.
What is the easiest way to achieve this?
 Answer: Write the string by using the WriteLine
method of the StreamWriter class.
 Question: What method would you use to read a
64-bit signed integer from a binary stream?
 Answer: The ReadInt64() method.