Next: About this document Up: Les entrées-sorties Previous: Formattage des données

Gestion de fichiers

Pour gérer les fichiers, trois autres types sont définis dans la bibliothèque fstream.h :

ifstream
fichier en lecture
ofstream
fichier en écriture
fstream
fichier en lecture et écriture.

Pour chaque type de fichier, il existe plusieurs fonctions à appliquer, les principales sont les suivantes :


open_mode est un type énuméré qui peut prendre les valeurs suivantes :


Ces modes peuvent être couplés par un ou logique. seek_dir est également un type énuméré qui peut prendre les valeurs suivantes :



#include <fstream.h>

const int MaxBuffer=256 ;
const char nomFichierIn[]="./essai.bat" ;
const char nomFichierOut[]="./sortie.txt" ;

int main(void) {

  ifstream ficIn ;
  ofstream ficOut ;
  char buffer[MaxBuffer] ;

  ficIn.open(nomFichierIn) ;
  if (ficIn == 0) {
         cerr << "erreur ouverture en lecture : "
                        << nomFichierIn << endl ;
         return 1 ;
  }
  ficOut.open(nomFichierOut) ;
  if (ficOut==0) {
         cerr << "erreur ouverture en ecriture : "
                        << nomFichierOut << endl ;
         return 2 ;
  }
  ficIn.getline(buffer,MaxBuffer) ;
  while (ficIn.good()) {
         ficOut << buffer << endl ; // ne pas oublier endl !
         ficIn.getline(buffer,MaxBuffer) ;
  }
  ficIn.close() ;
  ficOut.close() ;
  cout << "copie terminee..." << endl ;
  return 0 ;
}
Les opérations open() et close() sont obligatoires. Il est important de toujours vérifier le bon déroulement de l'ouverture du fichier. Pour stocker des données formattées, il est nécessaire d'utiliser read(const void *,int taille) et write(const void *, int taille) :

#include <fstream.h>
const char nomFic[]="compteur.dat" ;
int main(void) {
  fstream ficInOut ;
  int cpt ;
  ficInOut.open(nomFic,ios::in|ios::out|ios::nocreate) ;
  if (ficInOut == 0) {
    cpt=0 ;
    ficInOut.open(nomFic,ios::out) ;
    if (ficInOut == 0) {
      cerr << "erreur ouverture en ecriture fichier" << endl ;
      return 1 ;
    }
  } else ficInOut.read(&cpt, sizeof(cpt)) ;
  cpt++ ;
  cout << "valeur du compteur : " << cpt << endl ;
  ficInOut.seekp(0) ;
  ficInOut.write(&cpt,sizeof(cpt)) ;
  ficInOut.close() ;
  return 0 ;
}


@
vendredi, 7 novembre 1997, 14:51:48 MET