Vous êtes sur la page 1sur 37

Langages de Programmation et

Compilation: “C++”
By
Ts. Dr. Ir. HIKMA Shabani
Email: hikma_shabani@outlook.com
PRÉSENTATION DU MODULE

* PLAN – Huit Chapitres


* VALIDATION DU MODULE/Contrôle des connaissances:
– TP notés
– Examen à la Fin du module
* OBJECTIFS:
– Faire découvrir le langage C++
– Être capable d’écrire et de concevoir un programme
C++ simple de bout en bout.

9/4/2022 Langages de Programmation et Compilation pour le Départment de Génie Electrique, Faculté des 2
Sciences Appliquées (FSA), Université MAPON @ Ts. Dr. Ir. HIKMA Shabani.
CHAPT_VII: Les Fichiers

* Plan Prévisionnel
1. Généralités
2. Manipulations des Fichiers
3. Exercices

9/4/2022 Langages de Programmation et Compilation pour le Départment de Génie Electrique, Faculté des 3
Sciences Appliquées (FSA), Université MAPON @ Ts. Dr. Ir. HIKMA Shabani.
VII. 1. Généralités
 Un programme a en général besoin :
 de lire des données (textes, nombres, images, sons, mesures,
signaux générés, …)
 de sauvegarder des résultats (texte, nombres, images, sons,
signaux générés, …)
- Donc cela se fait en lisant et en écrivant dans des fichiers.
 Pour manipuler un fichier, on utilise un pointeur sur une
donnée spécifique dont le type est FILE.
 La variable fichier contiendra l’adresse en mémoire du
début du fichier.
- Un pointeur permet de se repérer dans le fichier.
 On accède à une information en amenant le pointeur sur sa
position.

Pointeur

9/4/2022 Langages de Programmation et Compilation pour le Départment de Génie Electrique, Faculté 4


des Sciences Appliquées (FSA), Université MAPON @ Ts. Dr. Ir. HIKMA Shabani.
VII. 1. 1. Définition
 Un fichier est un ensemble d'informations stockées sur une
mémoire de masse (disque dur, disquette, bande magnétique,
CD-ROM).
 Ces informations sont sauvegardées à la suite les unes des
autres et ne sont pas forcément de même type (char, int, float,
structure, etc...)

9/4/2022 Langages de Programmation et Compilation pour le Départment de Génie Electrique, Faculté 5


des Sciences Appliquées (FSA), Université MAPON @ Ts. Dr. Ir. HIKMA Shabani.
VII. 1. 2. Composition de Nom du Fichier
 Sur le support de sauvegarde, le fichier possède un nom qui est
composé de 2 parties :
1. Le nom proprement dit, et
2. l’extension.
-L’extension donne des informations sur le type d’informations
stockées (à condition de respecter les extensions associées au
type du fichier).
 Exemples :
• toto.txt – le fichier se nomme toto et contient du texte. Il a été
édité sous notepad/Wordpad par exemple
• mon_cv.doc – le fichier se nomme mon_cv et contient du texte. Il
a été édité sou Ms Word.
• ex1.cpp – le fichier se nomme ex1 et contient le texte d’un
programme écrit en C++ (fichier source)
• ex1.exe – le fichier se nomme ex1, il est exécutable.
• bibi.dll – le fichier se nomme bibi, c’est un fichier nécessaire à
l’exécution d’un autre logiciel.
9/4/2022 Langages de Programmation et Compilation pour le Départment de Génie Electrique, Faculté 6
des Sciences Appliquées (FSA), Université MAPON @ Ts. Dr. Ir. HIKMA Shabani.
VII. 1. 3. Accès au Fichier
 Généralement, deux types d'accès sont distingués :
 Accès séquentiel.
 Accès direct (Random I/O)

I. Accès Séquentiel
 Il est possible sur tout support :
 Pas de cellule vide.
 On accède à une cellule quelconque en se déplaçant (via le
pointeur sur un enregistrement du fichier), depuis la cellule de
départ.
 On ne peut pas détruire une cellule.
 On peut par contre tronquer la fin du fichier.
 On peut ajouter une cellule à la fin.

9/4/2022 Langages de Programmation et Compilation pour le Départment de Génie Electrique, Faculté 7


des Sciences Appliquées (FSA), Université MAPON @ Ts. Dr. Ir. HIKMA Shabani.
VII. 1. 3. Accès au Fichier
II. Accès direct (Random I/O)
 Il est utilisé sur disques, disquettes, CD-ROM où l'accès
séquentiel est aussi possible aussi.
 Cellule vide possible.
 On peut directement accéder à une cellule.
 On peut modifier n'importe quelle cellule.

9/4/2022 Langages de Programmation et Compilation pour le Départment de Génie Electrique, Faculté 8


des Sciences Appliquées (FSA), Université MAPON @ Ts. Dr. Ir. HIKMA Shabani.
VII. 1. 4. Codages des Informations stockées dans un Fichier
 Deux façons de coder les informations stockées dans un fichier :
 En texte.
 En binaire.

I. Fichiers en Texte
 Ils contiennent des informations sous la forme de caractères
(en générale en utilisant le code ASCII).
 Ces fichiers sont listables et éditables.
 Le dernier octet de ces fichiers est EOF (End Of File).
 Ils peuvent posséder les extensions .txt, .doc, .rtf, .cpp, .bas,
.pas, .ini, etc.
- Un exemple de fichier texte est le source d’ un programme C++

9/4/2022 Langages de Programmation et Compilation pour le Départment de Génie Electrique, Faculté 9


des Sciences Appliquées (FSA), Université MAPON @ Ts. Dr. Ir. HIKMA Shabani.
VII. 1. 4. Codages des Informations stockées dans un Fichier
II. Fichiers en binaire
 Ils contiennent directement la représentation mémoire des
informations.
 Un fichier binaire peut aussi être vu comme une séquence d’
octets (nombres).
 Ils ne sont ni listables, ni éditables.
 Ils possèdent par exemple les extensions .obj, .bin, .exe, .dll,
.pif, etc.
- Un exemple de fichier binaire est le résultat de la compilation
d’ un programme C++ (programme exécutable).

9/4/2022 Langages de Programmation et Compilation pour le Départment de Génie Electrique, Faculté 10


des Sciences Appliquées (FSA), Université MAPON @ Ts. Dr. Ir. HIKMA Shabani.
VII. 2. Manipulations des Fichiers
 Pour manipuler un fichier, on commence par l’ouvrir et
vérifier qu’il est effectivement ouvert (s’il n’existe pas, cela
correspond à une création).
 Lorsque la manipulation est terminée, il faut fermer ce
fichier et vérifier sa fermeture effective.
 C++ ne distingue pas les fichiers à accès direct des fichiers à
accès séquentiel.
 Certaines fonctions de la bibliothèque livrée avec le compilateur
permettent l'accès direct.
 Les fonctions standards sont des fonctions d'accès séquentiel.
 Il existe principalement 2 bibliothèques standard pour
manipuler des Fichiers :
1. cstdio – il est en fait pour le langage C.
2. fstream – il est typiquement pour C++ (notre objectif)

9/4/2022 Langages de Programmation et Compilation pour le Départment de Génie Electrique, Faculté 11


des Sciences Appliquées (FSA), Université MAPON @ Ts. Dr. Ir. HIKMA Shabani.
VII. 2. Manipulations des Fichiers
 C++ fournit les opérations suivantes dans la gestion des
fichiers :
 open() : création d'un fichier
 read() : lecture des données
 write : écriture de nouvelles données
 close() : Fermeture d'un fichier
 La plupart des fonctions permettant la manipulation des
fichiers sont rangées dans :
- la bibliothèque standard stdio.h
- certaines dans la bibliothèque io.h pour le BORLAND C++.
 Ces fonctions sont très nombreuses. Seules quelques-unes
sont présentées ici.

9/4/2022 Langages de Programmation et Compilation pour le Départment de Génie Electrique, Faculté 12


des Sciences Appliquées (FSA), Université MAPON @ Ts. Dr. Ir. HIKMA Shabani.
VII. 2. Manipulations des Fichiers
 La première chose à faire quand on veut manipuler des fichiers,
c'est de les ouvrir ou les créer (s’ il n’existe pas encore!).
 Pour cela, il faut commencer par inclure le fichier d'en-tête
<fstream> comme suit:
#include <fstream>
 fstream correspond à file stream “flux vers les fichiers”
 Cette bibliothèque standard fstream fournit aux programmeurs C++
deux (2) classes de variables pour travailler avec des fichiers :
1. ofstream (output file stream) – Elle représente un flux de sortie.
- Elle est utilisée pour créer /ouvrir des fichiers et écrire des données
dans ces fichiers.
2. ifstream (input file stream) – Elle représente un flux d'entrée.
- Elle est utilisée pour lire les données des fichiers.

fstream

ofstream ifstream

9/4/2022 Langages de Programmation et Compilation pour le Départment de Génie Electrique, Faculté 13


des Sciences Appliquées (FSA), Université MAPON @ Ts. Dr. Ir. HIKMA Shabani.
VII. 2. 1. Création et Ouverture d’ un Fichier
A. Initialisation de la Variable Associée
 La méthode pour créer/ouvrir un fichier est d’ initialiser la variable
qui doit lui être associée à l’ aide d’ une chaîne de caractères
décrivant le chemin d’ accès au fichier.
 Syntaxe :
 ofstream <nomDuFichier>("chemin"); //ouvrir et y écrire.
 ifstream <nomDuFichier>("chemin"); //ouvrir et lire.
NB :
 Cette façon d’ ouvrir/créer les fichiers présente plusieurs caractéristiques
notables :
- Si le chemin d’ accès comporte un dossier qui n’existe pas, l’ ouverture
échoue.
- Si le chemin d’ accès est correct, mais que le fichier n’existe pas, il est
créé.
- Si le fichier existe, il est ouvert :
• S’ il s’ agit d’ une ouverture en vue d’ une insertion de données, la
longueur du fichier est ramenée à 0. Donc son contenu antérieur est perdu.
9/5/2022 Langages de Programmation et Compilation pour le Départment de Génie Electrique, Faculté 14
des Sciences Appliquées (FSA), Université MAPON @ Ts. Dr. Ir. HIKMA Shabani.
VII. 2. 1. Création et Ouverture d’ un Fichier
A. Initialisation de la Variable Associée
 Avant d’ écrire dans un fichier ou de lire le fichier créé, il faut d’ abord
vérifier que l’ ouverture/création du fichier s‘est bien passée.
 Pour vérifier qu’ une ouverture/création s’ est bien passée, il faut tester
la variable de type ofstream ou ifstream comme suit :
if(!nomDuFichier);
{
cout<<"Fichier non créé";
}
else
{
cout<<"fichier créé avec succès!";
}
NB : Avec la variable de type ofstream, on utilise :
- L’ opérateur d’ insertion " << " pour envoyer dans le fichier les données que l’ on
veut y voir figurer.
Avec la variable de type ifstream, on utilise :
- L’ opérateur d’ extraction " >> " pour envoyer dans des variables appropriées les
informations extraites du fichier.
9/4/2022 Langages de Programmation et Compilation pour le Départment de Génie Electrique, Faculté 15
des Sciences Appliquées (FSA), Université MAPON @ Ts. Dr. Ir. HIKMA Shabani.
VII. 2. 1. Création et Ouverture d’ un Fichier
A. Initialisation de la Variable Associée
 Exemple : Ecrire C++ code pour créer et vérifier le fichier mesDonnees
avec le chemin d’ accès c:\\Mes documents\\resulltats.txt.
Solution:
#include <iostream>
#include <fstream>
using namespace std;  Si le fichier a été créé avec succès,
int main() après exécution de ce code :
{ - Le console va afficher :
ofstream mesDonnees("resultats.txt");
if(!mesDonnees) fichier cree avec success !
{
cout<<"Fichier non cree";
}
else
{
cout<<"fichier cree avec success !";
}
return 0;
}

9/4/2022 Langages de Programmation et Compilation pour le Départment de Génie Electrique, Faculté 16


des Sciences Appliquées (FSA), Université MAPON @ Ts. Dr. Ir. HIKMA Shabani.
VII. 2. 1. Création et Ouverture d’ un Fichier
B. La Fonction open()
 L’ initialisation d’ une variable est une opération simple mais elle
présente une limitation de n’ avoir lieu qu’ une seule fois.
 Il peut arriver qu’ une même variable intervienne dans plusieurs
ouvertures (ou tentatives d’ ouvertures, …) successives :
- Les classes ofstream et ifstream proposent, pour répondre à ce besoin,
une fonction member nommée open() qui peut accepter comme
paramètre un chemin d’ accès :
• Syntaxe :
 ofstream <nomDuFichier>; //ifstream<nomDuFichier>;
 nomDuFichier.open("chemin"); //ouverture “normale”

• Exemple :
ofstream monFichier; //ifstream monFichier
monFichier.open("essai.txt"); //ouverture normale

9/5/2022 Langages de Programmation et Compilation pour le Départment de Génie Electrique, Faculté 17


des Sciences Appliquées (FSA), Université MAPON @ Ts. Dr. Ir. HIKMA Shabani.
VII. 2. 1. Création et Ouverture d’ un Fichier
B. La Fonction open()
 La fonction open() peut aussi recevoir une specification de mode
d’ ouverture :
• Exemple:
 ofstream fichierACompleter; //ifstream fichierACompleter
 fichierACompleter.open("ilGrandit.txt", ios::app);
 On peut combiner plusieurs modes à l’ aide de l’ opérateur “OU
bitaire” noté |.
• Exemple :
 ofstream monFichier("essai.txt", ios : : nocreate | ios : :app);
 monFichier("essai.txt", ios : : nocreate | ios : :app);
- Le mode d’ ouverture spécifie dans cet exemple nous garantit à la
fois que :
1. Nous avons un fichier déjà present (à cause de: ios : : nocreate)
2. Nous conservons son contenu antétieur (grâce à: ios : : app)
9/5/2022 Langages de Programmation et Compilation pour le Départment de Génie Electrique, Faculté 18
des Sciences Appliquées (FSA), Université MAPON @ Ts. Dr. Ir. HIKMA Shabani.
VII. 2. 1. Création et Ouverture d’ un Fichier
B. La Fonction open()
Tableau : Quelques modes pour ouvrir un fichier
Constante Description
ios : : app Si le fichier existe, son contenu est conservé et toutes les données
insérées seront ajoutées en fin de fichier.
- app est l’ abréviation de append.
ios : : nocreate Si le fichier n’ existe pas, il ne sera pas créé, mais il y aura échec de
l’ ouverture.
ios : : noreplace Si le fichier existe déjà, il y aura erreur d’ ouverture sauf si le mode
ios : : app est également spécifié.
ios : : ate Ouvrir un fichier pour la sortie et déplacer le contrôle de
lecture/écriture à la fin du fichier.
ios : : in Ouvrir un fichier pour la lecture.
ios : : out Ouvrir un fichier en écriture.
ios : : trunc Si le fichier existe déjà, son contenu sera tronqué avant d'ouvrir le
fichier.

9/4/2022 Langages de Programmation et Compilation pour le Départment de Génie Electrique, Faculté 19


des Sciences Appliquées (FSA), Université MAPON @ Ts. Dr. Ir. HIKMA Shabani.
VII. 2. 1. Création et Ouverture d’ un Fichier
C. Exemple : Code C++ Création et Ouverture d’ un Fichier
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
fstream fichier;
fichier.open("etd.txt", ios::out);
if (!fichier)
{
cout<< "Fichier non cree!";
}
else
{
cout<< "Fichier cree avec success!";
}
return 0;
}

9/5/2022 Langages de Programmation et Compilation pour le Départment de Génie Electrique, Faculté 20


des Sciences Appliquées (FSA), Université MAPON @ Ts. Dr. Ir. HIKMA Shabani.
VII. 2. 2. Écriture et Lecture d’ un Fichier
I. Fichier au Format Text
 I.1. Les sorties formatées
 Cette sortie est obtenue à l’ aide de l’ opérateur d’ insertion
dans un flux. Cette opération est notée: “<<”
- Exemple :  Si après exécution de ce fragment
int n=4; de code, on ouvre le fichier
double x=3.7;
essai.txt avec un éditeur de texte :
char c=‘y’;
ofstream monFichier("essai.txt"); - Son contenu apparaît sous la
if(!monFichier) forme :
{
43.7y
//l’ ouverture a réussi, on peut donc écrire
monFichier << n;
monFichier << x;
monFichier << c;
}

9/5/2022 Langages de Programmation et Compilation pour le Départment de Génie Electrique, Faculté 21


des Sciences Appliquées (FSA), Université MAPON @ Ts. Dr. Ir. HIKMA Shabani.
VII. 2. 2. Écriture et Lecture d’ un Fichier
I. Fichier au Format Text
 I.1. Les sorties formatées
 Plusieurs opérateurs d’ insertions peuvent être chaînés les uns
à la suite des autres dans une même instruction.
- Exemple :  Si après exécution de ce fragment
int n=4; de code, on ouvre le fichier
double x=3.7;
essai.txt avec un éditeur de texte :
char c=‘y’;
ofstream monFichier("essai.txt"); - Son contenu apparaît sous la
if(monFichier) forme :
{
4 3.7
//l’ ouverture a réussi, on peut donc écrire
monFichier << n <<‘t’ <<x <<endl ; y
monFichier << c <<‘\n’;
}

9/5/2022 Langages de Programmation et Compilation pour le Départment de Génie Electrique, Faculté 22


des Sciences Appliquées (FSA), Université MAPON @ Ts. Dr. Ir. HIKMA Shabani.
VII. 2. 2. Écriture et Lecture d’ un Fichier
I. Fichier au Format Text
 I.2. Les entrées formatées
 Cette entrée est obtenue à l’ aide de l’ opérateur d’ extraction
d’ un flux.
 L’ opérateur d’ extraction est noté: “>>”
- Exemple – le fichier créé au paragraphe précédent peut être relu par le
code suivant :
int entier;
double decimal;
char caractere;
ifstream leFichier = "essai.txt";
if (leFichier)
{
//l’ ouverture a réussi, on peut donc lire
leFichier >> entier;
leFichier >> decimal;
leFichier >> caractere;
}

9/5/2022 Langages de Programmation et Compilation pour le Départment de Génie Electrique, Faculté 23


des Sciences Appliquées (FSA), Université MAPON @ Ts. Dr. Ir. HIKMA Shabani.
 I. Fichier au Format Text
 I.3. La fonction getline()
 Elle utilise 3 paramètres :
 Le 1er est un “pointeur sur char” qui doit contenir l’ adresse de la
zone de mémoire qui va accueillir les caracteres extraits du fichier.
 Le 2nd est le nombre maximum de caractères qui doivent être
extraits du fichier.
- Ce paramètre permet de garantir qu’ un texte d’ une longueur inattendue ne
créera pas de problèmes en débordant a zone de mémoire prévue à son
intention.
 Le 3ème paramètre est un caractère qui indique quel est le séparateur
matérialisant la fin du texte à extraire.
- Ce paramètre est doté d’ un d’ une valeur par défaut: le retour à la ligne ‘\n’
- Si l’ on transmet à getline() une autre valeur pour ce troisième paramètre, il
est possible d’extraire en une seule opération un texte comportant plusieurs
paragraphes.
NB :  Lorsqu’ on lit un fichier texte, utiliser EOF (End of File) comme délimiteur final permet à
getline() d’extraire en une seule fois tout le texte jusqu’ à la fin du fichier à condition que
la zone de mémoires accueillant les données soit d’ une taille suffisante.
9/4/2022 Langages de Programmation et Compilation pour le Départment de Génie Electrique, Faculté 24
des Sciences Appliquées (FSA), Université MAPON @ Ts. Dr. Ir. HIKMA Shabani.
 I. Fichier au Format Text
 I.4. Exemple : Écriture des données dans un fichier
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
fstream fichier;
string ligne;
fichier.open("etd.txt", ios::out);
if (!fichier)
{
cout<< "Ce fichier n’ existe pas!";
}
else
{
cout<< "Saisir une chaine de caracteres :";
getline(cin,ligne);
fichier<<ligne;//Ecrire la ligne lue dans le fichier
}
return 0;
}
NB : Une fois que l'utilisateur a saisi la chaîne "Hello", le contenu de "etd.txt" devient: Hello
9/5/2022 Langages de Programmation et Compilation pour le Départment de Génie Electrique, Faculté 25
des Sciences Appliquées (FSA), Université MAPON @ Ts. Dr. Ir. HIKMA Shabani.
 I. Fichier au Format Text
 I.4. Exemple : La lecture du fichier précédent (Slide25)
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
fstream fichier;
string ligne;
fichier.open("etd.txt", ios::in);
if (!fichier)
{
cout<< "Ce fichier n’ existe pas!";
}
else
{
while(!fichier.eof()) //tandis que nous n’ avons pas attaint la fin du fichier
{
fichier >>ligne; //lire une ligne
cout<<ligne<<endl; //afficher la ligne lue
}
}
return 0; NB : La console affichera le mot "Hello" qui a été saisi
par l’ utilisateur dans l’ exemple précédent!
}
9/5/2022 Langages de Programmation et Compilation pour le Départment de Génie Electrique, Faculté 26
des Sciences Appliquées (FSA), Université MAPON @ Ts. Dr. Ir. HIKMA Shabani.
VII. 2. 2. Écriture et Lecture d’ un Fichier
II. Fichier au Format Binaire
 Un fichier binaire est un fichier contenant une succession d'octets,
chacun d'eux pouvant prendre une valeur décimale allant de 0 à 255
(00 à FF en hexadécimal).
 En général on attribue une extension .bin ou .dat à un fichier binaire
qui ne présente pas un format reconnu par un logiciel particulier.
 Dans le cas contraire, on lui attribue l'extension reconnue par ce logiciel.
 Un fichier binaire se distingue d'un fichier texte (extension .txt) en
ce sens qu'il peut contenir des octets dont la valeur ne correspond à
aucun des caractères reconnus par un éditeur de texte ordinaire.
 Pour cette raison un fichier binaire doit être lu :
- soit avec un logiciel spécifique qui comprend son format,
- soit avec un éditeur hexadécimal.
 Dans le dernier cas, l'éditeur hexadécimal se contente d'afficher la valeur
numérique (00 à FF) de chacun des octets contenus dans le fichier.
9/4/2022 Langages de Programmation et Compilation pour le Départment de Génie Electrique, Faculté 27
des Sciences Appliquées (FSA), Université MAPON @ Ts. Dr. Ir. HIKMA Shabani.
VII. 2. 2. Écriture et Lecture d’ un Fichier
II. Fichier au Format Binaire
 II.1. La classe ofstream
 Pour ouvrir en écriture un fichier binaire, il suffit :
- d’appeler le constructeur qui a en paramètre le nom du fichier
et le mode d'ouverture,et
• fixer ce deuxième paramètre (c’est-à-dire le mode) à :
ios::out | ios::binary
 Exemple : ofstream monfichier("toto.xyz", ios::out | ios::binary);
 Pour savoir si le fichier a bien été ouvert en écriture la méthode
is_open() renvoie true si le fichier est effectivement ouvert.
 Pour écrire dans le fichier on utilise la méthode :
write((char *)buffer , int nb) //pour écrire nb octets dans ce fichier.

9/4/2022 Langages de Programmation et Compilation pour le Départment de Génie Electrique, Faculté 28


des Sciences Appliquées (FSA), Université MAPON @ Ts. Dr. Ir. HIKMA Shabani.
VII. 2. 2. Écriture et Lecture d’ un Fichier
II. Fichier au Format Binaire
 II.2. La classe ifstream
 Pour ouvrir en leture un fichier binaire, il suffit :
- d’appeler le constructeur qui a en paramètre le nom du fichier
et le mode d'ouverture, et
• fixer ce deuxième paramètre (c’est-à-dire le mode) à :
ios::in | ios::binary
 Exemple : ifstream monfichier("toto.xyz", ios::in | ios::binary);
 Pour savoir si le fichier a bien été ouvert en écriture la méthode
is_open() renvoie true si le fichier est effectivement ouvert.
 Pour lire dans le fichier on utilise la méthode :
read((char *)buffer , int nb) //pour lire nb octets de ce fichier.

9/4/2022 Langages de Programmation et Compilation pour le Départment de Génie Electrique, Faculté 29


des Sciences Appliquées (FSA), Université MAPON @ Ts. Dr. Ir. HIKMA Shabani.
VII. 2. 2. Écriture et Lecture d’ un Fichier
II. Fichier au Format Binaire
 II.3. Création et lecture des fichiers binaires
 Pour écrire des octets dans un fichier binaire "fic1.dat" :
1) On commence par écrire ces octets dans un tableau en
mémoire int t[100], puis
2) On transfère le contenu de ce tableau dans le fichier
binaire.
 Pour lire des octets contenus dans un fichier binaire "fic1.dat",
on écrit ces données dans un tableau en mémoire int T[ ] :
- Exemple: Fichier fic1.dat
Écriture d’ octets d’ un fichier vers un tableau et d’ un tableau vers un fichier.

T [0] T [1] T [9]

Tableau T [ ] EOF

9/4/2022 Langages de Programmation et Compilation pour le Départment de Génie Electrique, Faculté 30


des Sciences Appliquées (FSA), Université MAPON @ Ts. Dr. Ir. HIKMA Shabani.
II. Fichier au Format Binaire
 Exemple_1 : C++ code_Écriture d'un fichier binaire
#include <iostream>
#include <fstream>
using namespace std;
int main (void)
{
int a = 78, t1 [6], i;
double b = 9.87;
char c = 'W';
for (i = 0; i < 6; i++)
t1 [i] = 10000+i;
ofstream f ("toto.xyz", ios::out | ios::binary);
if(!f.is_open())
cout << "Impossible d'ouvrir le fichier en écriture !" << endl;
else
{
f.write ((char *)&a, sizeof(int));
f.write ((char *)&b, sizeof(double));
f.write ((char *)&c, sizeof(char));
for (i = 0; i < 6; i++)
f.write ((char *)&t1[i], sizeof(int));
}
f.close();
return 0;
}
9/4/2022 Langages de Programmation et Compilation pour le Départment de Génie Electrique, Faculté 31
des Sciences Appliquées (FSA), Université MAPON @ Ts. Dr. Ir. HIKMA Shabani.
II. Fichier au Format Binaire
 Exemple_2 : C++ code_Lecture d'un fichier binaire
#include <iostream>
#include <fstream>
using namespace std;
int main (void)
{
int a, t1 [6], i;
double b;
char c;
string s;
ifstream f ("toto.xyz", ios::in | ios::binary);
if (!f.is_open())
cout << "Impossible d'ouvrir le fichier en lecture !" << endl;
else
{
f.read ((char *)&a, sizeof(int));
f.read ((char *)&b, sizeof(double));
f.read ((char *)&c, sizeof(char));
for (i = 0; i < 6; i++)
f.read ((char *)&t1[i], sizeof(int));
}
f.close();
cout << "a=" << a << endl << "b=" << b << endl << "c=" << c << endl;
for (i = 0; i < 6; i++)
cout << t1 [i] << endl;
return 0;
} 32
9/5/2022 Langages de Programmation et Compilation pour le Départment de Génie Electrique, Faculté
des Sciences Appliquées (FSA), Université MAPON @ Ts. Dr. Ir. HIKMA Shabani.
VII. 2. 3. Fermeture d’ un Fichier
 Lorsqu’ une variable associée à un fichier cesse d’ exister (à la fin
du bloc où elle est définie, comme toutes les variables), le fichier est
automatiquement refermé.
 Il n’est donc pas nécessaire de fermer explicitement un fichier à la fin
d’ une fonction qui l’ a ouvert à l’ aide d’ une de ses variables locales.
 Il arrive toutefois qu’ une fermeture explicite s’ avère nécessaire :
- C’ est en particulier le cas si l’ on souhaite associer un nouveau
fichier à la même variable. On fait alors appel à la fonction
membre nommée close().
- Exemple :
ofstream monFichier("essai_1.txt");
monFichier << "Petite demonstration";
monFichier.close(); //fermeture du fichier essai_1.txt
monFichier.open("essai_2.txt");
monFichier <<"On est dans le second fichier";
NB :
 Comme le montre l’ exemple ci-dessus, un fichier peut être refermé à l’ aide de close(),
même s’ il n’ a pas été ouvert par open() mais par initialisation de la variable associée.
9/5/2022 Langages de Programmation et Compilation pour le Départment de Génie Electrique, Faculté 33
des Sciences Appliquées (FSA), Université MAPON @ Ts. Dr. Ir. HIKMA Shabani.
VII. 3. Exercices
1. a) Écrire un programme qui écrit dans le fichier example.txt le texte:
Hello world !
Voici un programme illustrant l’ écriture dans un fichier.
b) Écrire un programme qui lit le fichier example.txt définit dans
l'exercice 1a) précédent et affiche son contenu.

2. a) Proposez un programme qui écrit en binaire une chaîne de


caractère suivant de la liste des entiers de 0 à 1000 :
Liste des entiers de 1 à 1000
0
1
2
……
1000
b) Proposez un programme qui lit le fichier écrit en binaire de
l'exercice 2a) précédent et affiche son contenu.
9/4/2022 Langages de Programmation et Compilation pour le Départment de Génie Electrique, Faculté 34
des Sciences Appliquées (FSA), Université MAPON @ Ts. Dr. Ir. HIKMA Shabani.
VII. 3. Exercices
NB : - Le but de l’ exercice 1a) est de vérifier les points techniques suivants :
• L'ouverture d'un fichier en écriture en mode texte.
• Tester si un fichier est ouvert (et si vous avez les droits d'écriture sur le fichier)
• Écrire de données en texte
• Fermer le fichier une fois l'écriture terminée
- Le but de l’ exercice 1b) est de vérifier les points techniques suivants :
• L'ouverture d'un fichier en lecture
• Tester si le fichier est ouvert (et si vous avez les droits de lecture sur le fichier)
• Lecture des données écrites en texte
• Fermer le fichier une fois la lecture terminée
- Le but de l’ exercice 2a) est de vérifier les points techniques suivants :
• L'ouverture d'un fichier en écriture en mode binaire
• Tester si un fichier est ouvert (et si vous avez les droits d'écriture sur le fichier)
• Écrire de données en binaire
• Fermer le fichier une fois l'écriture terminée
- Le but de l’ exercice 2b) est de vérifier les points techniques suivants :
• L'ouverture d'un fichier en lecture en mode binaire
• Tester si le fichier est ouvert (et si vous avez les droits de lecture sur le fichier)
• Lecture des données écrites en binaire
• Fermer le fichier une fois la lecture terminée
9/4/2022 Langages de Programmation et Compilation pour le Départment de Génie Electrique, Faculté 35
des Sciences Appliquées (FSA), Université MAPON @ Ts. Dr. Ir. HIKMA Shabani.
VII. 3. Exercices
3. a) Crée un fichier "fic1.dat" :
- Écrit 10 octets (0,1,2,3,4,5,6,7,8 et9) dans un tableau t[100],
- Transfère le contenu de ce tableau dans le fichier "fic1.dat", puis
- Ferme le fichier "fic1.dat"
b) Ouvre le fichier "fic1.dat" :
- Lit les 10 premiers octets contenus dans ce fichier,
- Transfère ces 10 premiers octets dans un tableau T[100], puis
- Ferme le fichier "fic1.dat"
c) Crée un fichier "fic2.dat",
- Écrit dans ce fichier les 10 octets contenus dans le tableau t[]
augmentés de la valeur 10, puis
- Ferme le fichier "fic2.dat".

9/5/2022 Langages de Programmation et Compilation pour le Départment de Génie Electrique, Faculté 36


des Sciences Appliquées (FSA), Université MAPON @ Ts. Dr. Ir. HIKMA Shabani.
FIN!

Vous aimerez peut-être aussi