Partager via


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é (coutpar 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.

Voir aussi

Flux d’entrée