Sorell Stratège
Nombre de messages : 521 Localisation : Quel part où le sang coule. Date d'inscription : 01/05/2008
Feuille de personnage Surnom dans la team: Sénéchal Noir Victoire/défaite: (0/0)
| Sujet: Fichiers et flux Lun 17 Déc - 13:17 | |
| Fichiers et flux Les fichiers peuvent être considérés comme des flux d'octets, et les différentes classes et fonctions disponibles sont déclarés dans le fichier fstream. Les classes basic_ifstream et basic_ofstream sont dérivées respectivement des classes basic_istream et basic_ostream (voir le schéma ci-dessus). Il existe aussi une classe fstream, qui dérive de la classe basic_iostream. Les fichiers de cette classe permettent donc les opérations de lecture et d'écriture. Ces classes possèdent chacune deux constructeurs :
- l'un, ayant comme premier paramètre le nom du fichier (une chaîne de caractères NTCTS) ainsi que des options facultatives prises parmi les constantes prédéfinies de type openmode (fourni dans la classe mère ios) suivantes :
- Code:
-
static const openmode app; // append mode : toutes les écritures // sont effectuées en fin de fichier static const openmode ate; // atend mode : positionne le pointeur // du fichier en fin dès l'ouverture static const openmode binary; // fichier binaire (non traité comme // un fichier texte) static const openmode in; // ouvre le fichier en lecture static const openmode out; // ouvre le fichier en écriture static const openmode trunc; // tronque le fichier s'il existe à // l'ouverture crée l'objet flux et ouvre le fichier correspondant dans le mode indiqué. Par exemple :
- Code:
-
#include <iostream> // pour la classe ios #include <fstream> // pour les classes ifstream et ofstream // ...
ifstream FicIn ("Source"); ofstream FicOut ("Dest", ios::out | ios::app); crée les objets FicIn et FicOut, ouvre le fichier Source en lecture (mode choisi par défaut) et le fichier Dest en écriture en se plaçant à la fin du fichier dès l'ouverture.
On remarquera l'utilisation de l'opérateur booléen | pour combiner plusieurs options.
On remarquera aussi l'utilisation de l'opérateur de résolution de portée :: indiquant l'appartenance des identificateurs out et app à la classe ios (et non à un objet de la classe).
Certaines implémentations offrent quelques options supplémentaires pour l'ouverture des fichiers en écriture, comme : ° nocreate : l'ouverture du fichier échoue si le fichier n'existe pas, ° noreplace : l'ouverture échoue si le fichier existe déjà.
- l'autre, sans paramètre (donc constructeur par défaut), qui permet seulement de construire un flux sans lui associer un fichier (et donc sans l'ouvrir). Ce constructeur est utilisé lorsque le nom du fichier n'est pas encore connu. Il nécessite l'utilisation ultérieure de la fonction open() ci-dessous.
Quelques fonctions supplémentaires sont offertes par ces classes : - open(), de profils :
- Code:
-
void open (const char* s, ios_base::openmode mode = ios_base::in); void open (const char* s, ios_base::openmode mode = ios_base::out); void open (const char* s, ios_base::openmode mode = ios_base::in | ios_base::out); respectivement pour les classes ifstream, ofstream et fstream.
- close(),
- bool is_open(),
- attach() (non standard mais qui existe dans certaines implémentations) qui permet d'associer un flux à un identificateur de fichier (fileid) ainsi que plusieurs fonctions en rapport avec l'utilisation des buffers.
| |
|