Sdílet prostřednictvím


Členské funkce vstupního datového proudu

Vstupní proud členské funkce se používají pro pevného disku.Funkce členů zahrnují:

  • Funkce open pro vstupní datové proudy

  • Funkce get

  • Funkce getline

  • Funkce čtení

  • Funkce seekg a tellg

  • Funkci close pro vstupní datové proudy

Funkce open pro vstupní datové proudy

Používáte-li proud vstupní soubor (ifstream), je tento proud přidružit konkrétní diskového souboru.To lze provést v konstruktoru, nebo můžete použít otevřete funkce.V obou případech argumenty jsou stejné.

Obvykle určují ios_base::openmode příznak při otevření souboru přidruženého vstupního datového proudu (výchozí režim je ios::in).Seznam open_mode příznaky, viz funkce open.Příznaky mohou být kombinovány s bitový operátor OR operátor (|).

Pro čtení souboru, nejprve použít selhání členské funkce pro zjištění, zda existuje:

istream ifile( "FILENAME" );
if ( ifile.fail() )
// The file does not exist ...

Funkce get

Neformátovaný získat členské funkce pracuje stejně jako >> operátor s dvěma výjimkami.První, získat zahrnuje funkce vzhledem extrakci vyloučí prázdné znaky prázdných znaků při skipws příznak je nastaven na (výchozí).Druhý, získat funkce je méně pravděpodobné, že způsobí vázané výstupního proudu (cout, například) zapsány.

Variantu získat funkce určuje adresu vyrovnávací paměti a maximální počet znaků, které chcete číst.To je užitečné pro omezení počtu znaků odeslaných na konkrétní proměnnou, jak ukazuje tento příklad:

// 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;
}

Vstup

1234

Výstup ukázky

1234

Funkce getline

Getline členské funkce se podobá získat funkce.Obě funkce povolit třetí argument, který určuje ukončovací znak pro vstup.Výchozí hodnota je znak nového řádku.Obě funkce, rezervovat jeden znak pro požadovaný ukončovací znak.Nicméně získat opouští ukončující znak v datovém proudu a getline odstraní ukončující znak.

Následující příklad určuje ukončovací znak pro vstupní proud:

// 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;
}

Vstup

test

Funkce čtení

Číst členské funkce načteme bajty souboru určené oblasti paměti.Délka argumentu určuje počet bajtů přečtených.Pokud tento argument nezadáte, čtení zastaví, jakmile je dosaženo fyzického konce souboru nebo v případě souboru textový režim, pokud je vložený EOF znak je číst.

V tomto příkladu načteme binární záznam mzdového souboru do struktury:

#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;
   }
}

Program předpokládá, že datové záznamy jsou formátovány přesně podle struktury s ukončující znaky carriage return a konce řádku.

Funkce seekg a tellg

Vstupní soubor proudy zachovat vnitřní ukazatel na místo v souboru, kde má data číst dále.Nastavit tento ukazatel se seekg fungovat, jak je znázorněno zde:

#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;
   }
}

Chcete-li použít seekg k implementaci systémů řízení zaměřené na záznam dat, vynásobte velikost pevné délky záznamu podle čísla záznamu získání pozice bajtu vzhledem ke konci souboru a potom pomocí získat objekt ke čtení záznamu.

tellg Členské funkce vrací aktuální pozici pro čtení souboru.Tato hodnota je typu streampos, typedef podle <iostream>.Následující příklad načte soubor a zobrazí pozice mezer.

#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;
   }
}

Funkci close pro vstupní datové proudy

Zavřete členské funkce zavře proud vstupní soubor přidružený soubor na disku a uvolní popisovač souboru operačního systému.Ifstream destruktor zavře soubor pro vás, ale můžete použít zavřete fungovat, pokud chcete otevřít další soubor pro stejný objekt datového proudu.

Viz také

Referenční dokumentace

Vstupní datové proudy