Copy of https://perso.isima.fr/loic/cpp/flux.fr.php
tete du loic

 Loïc YON [KIUX]

  • Enseignant-chercheur
  • Référent Formation Continue
  • Responsable des contrats pros ingénieur
  • Référent entrepreneuriat
  • Responsable de la filière F2 ingénieur
  • Secouriste Sauveteur du Travail
mail
loic.yon@isima.fr
phone
(+33 / 0) 4 73 40 50 42
location_on
Institut d'informatique ISIMA
  • twitter
  • linkedin
  • viadeo

[C++] Flux

Read in English

Date de première publication : 2013/09/24

Flux de caractères

Nous allons traiter de la manipulation basique des flux de données et en particulier, des fichiers textes.

Pour manipuler les différents éléments, il faudra include l'entête fstream et ne pas oublier de préfixer les choses avec std::

Cette page n'est pas censée se substituer à la documentation officielle ( ofstream, ifstream mais j'espère qu'elle est plus accessible lorsque l'on est au tout début de son apprentissage du C++ !

Vous utilisez déjà des flux (prédéfinis) dans vos programmes :

Ces flux peuvent bien entendu être redirigés vers des fichiers mais on peut directement accéder à des flux à des fichiers.

Écriture dans un flux

Pour voir comment on peut écrire dans un fichier, analysons le code suivant :

std::string   nom = "mon_fichier.txt";
  std::ofstream fichier(nom.c_str());

  if (!fichier.fail()) {
    fichier << quantite << std::endl; 
    for (int i = 0; i < quantite; ++i)
      fichier << i+1 << std::endl;

  fichier.close();

Si vous ne savez pas ce qu'est nom.c_str(), relisez la partie sur les chaînes de caractères.

Lecture à partir d'un flux

std::ifstream fichier; // autre manière d'ouvrir un fichier
int i = 0, max;

fichier.open(nom.c_str());
// fail() pas testé :-(

fichier >> max;

while(!fichier.eof() && i<max) {
  double lecture;
  fichier >> lecture;
  ++i;
  std::cout << lecture << " ";
}
fichier.close();

Types de flux

Nous venons de voir un premier type de flux (flux de caractères pour des fichiers texte). La page sur les chaînes de caractères vous donne un exemple de flux qui n'est pas associé à un fichier mais à une chaîne de caractères, pratique non ?

On peut manipuler des flux binaires mais le concept de serialisation n'existe pas en C++.