Fonctions membres de flux d’entrée
Les fonctions membres de flux d’entrée sont utilisées pour l’entrée de disque.
open
Si vous utilisez un flux de fichiers d’entrée (ifstream
), vous devez associer ce flux à un fichier de disque spécifique. Vous pouvez le faire dans le constructeur, ou vous pouvez utiliser la open
fonction. Dans les deux cas, les arguments sont les mêmes.
Vous spécifiez généralement un ios_base::openmode
indicateur lorsque vous ouvrez le fichier associé à un flux d’entrée (le mode par défaut est ios::in
). Pour obtenir la liste des openmode
indicateurs, consultez ios_base::openmode
. Les indicateurs peuvent être combinés avec l’opérateur « ou » au|
niveau du bit.
Pour lire un fichier, utilisez d’abord la fail
fonction membre pour déterminer s’il existe :
istream ifile("FILENAME");
if (ifile.fail())
// The file does not exist ...
get
La fonction membre non mise get
en forme fonctionne comme l’opérateur >>
avec deux exceptions. Tout d’abord, la get
fonction inclut des caractères d’espace blanc, tandis que l’extracteur exclut l’espace blanc lorsque l’indicateur skipws
est défini (valeur par défaut). Ensuite, la get
fonction est moins susceptible d’entraîner le vidage d’un flux de sortie lié (cout
par exemple).
Une variante de la get
fonction 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, comme le montre cet exemple :
// 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;
}
Input
1234
Exemple de sortie
1234
getline
La getline
fonction membre est similaire à la get
fonction. Toutes deux autorisent 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. Ces deux fonctions réservent un caractère pour le caractère de fin obligatoire. Toutefois, get
laisse le caractère de fin dans le flux 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;
}
Input
test
read
La read
fonction membre lit les octets d’un fichier dans 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, la lecture s’arrête lorsque la fin physique du fichier est atteinte ou, dans le cas d’un fichier en mode texte, lorsqu’un caractère incorporé EOF
est lu.
Cet exemple lit un enregistrement binaire à partir d’un fichier de paie 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 part du principe que les enregistrements de données sont mis en forme exactement comme spécifié par la structure sans retour chariot de fin ou caractères de flux de ligne.
seekg
et tellg
Les flux de fichiers d’entrée conservent un pointeur interne vers la position suivante dans le fichier où les données doivent être lues. Vous définissez ce pointeur avec la fonction seekg
, comme indiqué 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 implémenter seekg
des systèmes de gestion des données orientés enregistrements, multipliez la taille d’enregistrement de longueur fixe par le numéro d’enregistrement pour obtenir la position d’octet par rapport à la fin du fichier, puis utilisez l’objet get
pour lire l’enregistrement.
La fonction membre tellg
retourne la position actuelle du fichier pour la lecture. Cette valeur est de type streampos
, définie typedef
dans <iostream>
. L’exemple suivant lit un fichier et affiche des messages indiquant la position 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;
}
}
close
La close
fonction membre ferme le fichier disque associé à un flux de fichiers d’entrée et libère le handle de fichier du système d’exploitation. Le ifstream
destructeur ferme le fichier pour vous, mais vous pouvez utiliser la close
fonction si vous devez ouvrir un autre fichier pour le même objet de flux.