« Programmation C++/Les entrées-sorties » : différence entre les versions

Contenu supprimé Contenu ajouté
Manipulateurs <tt>setiosflags</tt> et <tt>resetiosflags</tt>
Autres types de flux
Ligne 30 :
}
 
== ManipulateurAutres types de flux ==
Les instances des classes dérivées des classes <tt>istream</tt> et <tt>ostream</tt> sont également manipulés avec les opérateurs <tt>&lt;&lt;</tt> et <tt>&gt;&gt;</tt>. Cependant, il ne faut pas oublier de les fermer en appelant la méthode <tt>close()</tt>.
 
=== Flux de fichier ===
La classe <tt>ifstream</tt> permet de lire à partir d'un fichier. Le contructeur a la syntaxe suivante :
ifstream(const char* filename, openmode mode=in)
Le paramètre <tt>mode</tt> peut être une combinaison des valeurs suivantes :
;<tt>app</tt>:('''app'''end) Placer le curseur à la fin du fichier avant écriture.
;<tt>ate</tt>:('''at e'''nd) Placer le curseur à la fin du fichier.
;<tt>binary</tt>:Ouvrir en mode binaire plutôt que texte.
;<tt>in</tt>:Autoriser la lecture.
;<tt>out</tt>:Autoriser l'écriture.
;<tt>trunc</tt>:('''trunc'''ate) Tronquer le fichier à une taille nulle.
 
Exemple 1 : lire un entier depuis un fichier
ifstream fichier("test.txt");
int a;
fichier >> a; // lire un entier
cout "A = " << a;
fichier.close();
 
Exemple 2 : afficher tous les caractères d'un fichier
ifstream fichier("test.txt");
while (fichier.good())
cout << (char) fichier.get();
fichier.close();
 
La classe <tt>ofstream</tt> permet d'écrire vers un fichier. Son constructeur a une syntaxe similaire :
ofstream(const char* filename, openmode mode=out|trunc)
 
Exemple :
ofstream fichier("test.txt");
fichier << setw(10) << a << endl;
fichier.close();
 
La classe <tt>fstream</tt> dérive de la classe <tt>iostream</tt> permettant à la fois la lecture et l'écriture. Cette dernière (<tt>iostream</tt>) dérive donc à la fois de la classe <tt>ostream</tt> et de la classe <tt>istream</tt>. Son constructeur a la syntaxe suivante :
fstream(const char* filename, openmode mode=in|out)
 
Exemple :
fstream fichier("test.txt");
fichier << setw(10) << a << endl;
fichier.seekg(0,ios_base::beg);
fichier >> b;
fichier.close();
 
=== Flux de chaîne de caractères ===
Ces flux permettent d'écrire pour produire une chaîne de caractères, ou de lire à partir d'une chaîne de caractères.
 
La classe <tt>istringstream</tt> dérivée de <tt>istream</tt> permet de lire à partir d'une chaîne de caractères, et possède deux constructeurs :
 
istringstream ( openmode mode = in );
istringstream ( const string & str, openmode mode = in );
 
Exemple :
int n, val;
string strvalues;
stringvalues = "125 320 512 750 333";
istringstream iss (stringvalues,istringstream::in);
for (n=0;n<5;n++)
{
iss >> val;
cout << val << endl;
}
 
La classe <tt>ostringstream</tt> dérivée de <tt>ostream</tt> permet d'écrire pour créer une chaîne de caractères, et possède également deux constructeurs :
 
ostringstream ( openmode mode = out );
ostringstream ( const string & str, openmode mode = out );
 
Le second permet de spécifier le début de la chaîne de caractères produite.
 
La méthode <tt>str()</tt> retourne la chaîne de caractères produite.
 
Exemple :
ostringstream oss (ostringstream::out);
int a = 100;
oss << "Test d'écriture a=" << a << "\n";
cout << oss.str();
 
La classe <tt>stringstream</tt> dérivée de <tt>iostream</tt> permet d'écrire et lire, et possède deux constructeurs :
stringstream ( openmode mode = in | out );
stringstream ( const string & str, openmode mode = in | out );
 
Exemple :
int n,val;
stringstream ss (stringstream::in | stringstream::out);
// écriture
ss << "120 42 377 6 5 2000";
// lecture
for (int n=0;n<6;n++)
{
ss >> val;
cout << val << endl;
}
 
 
== Manipulateurs ==
Le fichier d'en-tête <code>&lt;iomanip&gt;</code> définie des manipulateurs de flux tels que <code>endl</code>, <code>hex</code>.
Ces manipulateurs modifient la façon d'écrire ou lire les données qui suivent celui-ci.