Fonctions membres du flux d'entrée
Les fonctions membres de flux d'entrée sont utilisées pour l'entrée de disque.Les fonctions membres incluent :
La fonction ouverte pour les flux d'entrée
le fonction Get
la fonction de getline
la fonction de lecture
les fonctions de seekg et de tellg
La fonction close pour les flux d'entrée
La fonction ouverte pour les flux d'entrée
Si vous utilisez un flux de fichier d'entrée (ifstream), vous devez associer ce flux de données avec un fichier sur disque spécifique.Vous pouvez effectuer cette opération dans le constructeur, ou vous pouvez utiliser la fonction d' ouvrez .Dans les deux cas, les arguments sont identiques.
Vous spécifiez généralement une balise d' ios_base : : openmode lorsque vous ouvrez le fichier associé à un flux d'entrée (mode par défaut est IOS : : dans).Pour une liste des balises d' open_mode , consultez la fonction ouverte.Les indicateurs peuvent être combinées avec le de bits OR ( | opérateur).
Pour lire un fichier, utilisez d'abord la fonction membre d' échec pour déterminer si elle existe :
istream ifile( "FILENAME" );
if ( ifile.fail() )
// The file does not exist ...
le fonction Get
La fonction membre non mise en forme de get fonctionne comme l'opérateur d' >> avec deux exceptions.En premier lieu, le fonction GET inclut des espaces blancs, alors que l'extracteur exclut les espaces blancs lorsque la balise de skipws a la valeur (valeur par défaut).Ensuite, le fonction d'extraction est moins susceptible d'entraîner un flux de sortie attaché (cout, par exemple) à purger.
Une variante de fonction GET spécifie une adresse de mémoire tampon et le nombre maximal de caractères à lire.Ceci est utile pour limiter le nombre de caractères envoyés à une variable spécifique, car cet exemple montre :
// ioo_get_function.cpp
// compile with: /EHsc
// Type up to 24 characters and a terminating character.
// Any remaining characters can be extracted later.
#include <iostream>
using namespace std;
int main()
{
char line[25];
cout << " Type a line terminated by carriage return\n>";
cin.get( line, 25 );
cout << line << endl;
}
Entrée
1234
Résultat de l'exemple
1234
la fonction de getline
La fonction membre de getline est similaire à la fonction GET.Les deux fonctions permettent un troisième argument qui spécifie le caractère de fin pour l'entrée.la valeur par défaut est le caractère de saut de ligne.Les deux fonctions réservent un caractère pour le caractère de fin requis.Toutefois, get laisse le caractère de fin dans le flux de données et getline supprime le caractère de fin.
L'exemple suivant spécifie un caractère de fin pour le flux d'entrée :
// getline_func.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
int main( )
{
char line[100];
cout << " Type a line terminated by 't'" << endl;
cin.getline( line, 100, 't' );
cout << line;
}
Entrée
test
la fonction de lecture
La fonction membre de lecture lit des octets à partir d'un fichier à une zone de mémoire spécifiée.L'argument de longueur détermine le nombre d'octets lus.Si vous n'incluez pas cet argument, lire arrête lorsque la fin du fichier physique est atteint ou, dans le cas d'un fichier de mode de texte, lorsqu'un caractère incorporé d' EOF est lu.
Cet exemple lit un enregistrement binaire à partir d'un fichier de salaires dans une structure :
#include <fstream>
#include <iostream>
using namespace std;
int main()
{
struct
{
double salary;
char name[23];
} employee;
ifstream is( "payroll" );
if( is ) { // ios::operator void*()
is.read( (char *) &employee, sizeof( employee ) );
cout << employee.name << ' ' << employee.salary << endl;
}
else {
cout << "ERROR: Cannot open file 'payroll'." << endl;
}
}
Le programme suppose que les enregistrements de données sont mis en forme exactement comme spécifiés par la structure sans arrêter des caractères de retour chariot ou de saut de ligne.
les fonctions de seekg et de tellg
Les flux de fichier d'entrée conservent un pointeur interne à la position du fichier où les données doivent être lue suivant.Vous définissez ce pointeur avec la fonction d' seekg , comme illustré ici :
#include <iostream>
#include <fstream>
using namespace std;
int main( )
{
char ch;
ifstream tfile( "payroll" );
if( tfile ) {
tfile.seekg( 8 ); // Seek 8 bytes in (past salary)
while ( tfile.good() ) { // EOF or failure stops the reading
tfile.get( ch );
if( !ch ) break; // quit on null
cout << ch;
}
}
else {
cout << "ERROR: Cannot open file 'payroll'." << endl;
}
}
Pour utiliser seekg pour implémenter les systèmes de gestion de données enregistrement-orientés, multipliez la longueur d'enregistrement de longueur fixe par le nombre d'enregistrement pour obtenir la position d'octet par rapport à la fin de le fichier, puis utilisez l'objet de get pour lire l'enregistrement.
La fonction membre d' tellg retourne la position actuelle dans le fichier pour la lecture.Cette valeur est de type streampos, typedef défini dans <iostream> .L'exemple suivant lit un fichier et affiche des messages en affichant les positions des espaces.
#include <fstream>
#include <iostream>
using namespace std;
int main( )
{
char ch;
ifstream tfile( "payroll" );
if( tfile ) {
while ( tfile.good( ) ) {
streampos here = tfile.tellg();
tfile.get( ch );
if ( ch == ' ' )
cout << "\nPosition " << here << " is a space";
}
}
else {
cout << "ERROR: Cannot open file 'payroll'." << endl;
}
}
La fonction close pour les flux d'entrée
La fonction membre de fermez ferme le fichier sur disque associé à un flux de fichier d'entrée et libère le handle de fichier du système d'exploitation.le destructeur d' ifstream ferme le fichier pour vous, mais vous pouvez utiliser la fonction de fermez si vous devez ouvrir un autre fichier pour le même objet de flux.