Sdílet prostřednictvím


Členské funkce vstupního datového proudu

Členské funkce vstupního datového proudu se používají pro vstup disku.

open

Pokud používáte vstupní datový proud souboru (ifstream), musíte tento datový proud přidružit ke konkrétnímu souboru disku. Můžete to udělat v konstruktoru nebo můžete použít open funkci. V obou případech jsou argumenty stejné.

Obecně platí, že příznak ios_base::openmode při otevření souboru přidruženého ke vstupnímu streamu (výchozí režim je ios::in). Seznam openmode příznaků najdete v tématu ios_base::openmode. Příznaky lze kombinovat s bitovým operátorem "or" (|).

Pokud chcete přečíst soubor, nejprve pomocí fail členské funkce určete, jestli existuje:

istream ifile("FILENAME");

if (ifile.fail())
// The file does not exist ...

get

Neformátovaná get členová funkce funguje jako >> operátor se dvěma výjimkami. Nejprve funkce get obsahuje prázdné znaky, zatímco extraktor při nastavení příznaku skipws (výchozí) vyloučí prázdné znaky. Za druhé, funkce je méně pravděpodobné, get že způsobí vyprázdnění vázaného výstupního streamu (coutnapříklad).

Varianta get funkce určuje adresu vyrovnávací paměti a maximální počet znaků, které se mají přečíst. To je užitečné pro omezení počtu znaků odeslaných do konkrétní proměnné, 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

Ukázkový výstup

1234

getline

Členová getline funkce je podobná get funkci. Obě funkce umožňují třetí argument, který určuje ukončovací znak pro vstup. Výchozí hodnota je znak nového řádku. Obě funkce si zarezervují jeden znak pro požadovaný ukončovací znak. get Ukončovací znak však ponechá v datovém proudu a getline odebere ukončující znak.

Následující příklad určuje ukončovací znak vstupního datového proudu:

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

read

Členová read funkce čte bajty ze souboru do zadané oblasti paměti. Argument délka určuje počet přečtených bajtů. Pokud tento argument nezahrnete, čtení se zastaví při dosažení fyzického konce souboru nebo v případě souboru v textovém režimu při čtení vloženého EOF znaku.

Tento příklad načte binární záznam ze souboru mzdy 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ě tak, jak je specifikuje struktura bez ukončující znaky návratu na začátek řádku nebo odřádkování.

seekg a tellg

Datové proudy vstupních souborů udržují interní ukazatel na pozici v souboru, kde se mají data číst dál. Tento ukazatel nastavíte pomocí seekg funkce, jak je znázorněno tady:

#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ů správy dat orientovaných na záznamy, vynásobte velikost záznamu s pevnou délkou číslem záznamu, abyste získali pozici bajtu vzhledem ke konci souboru, a pak použijte get objekt ke čtení záznamu.

Členová tellg funkce vrátí aktuální pozici souboru pro čtení. Tato hodnota je typu streampos, definována typedef v <iostream>. Následující příklad přečte soubor a zobrazí zprávy zobrazující 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;
   }
}

close

Členová close funkce zavře diskový soubor přidružený ke vstupnímu datovému proudu souboru a uvolní popisovač souboru operačního systému. Destruktor ifstream zavře soubor za vás, ale funkci můžete použít close , pokud potřebujete otevřít jiný soubor pro stejný objekt streamu.

Viz také

Vstupní streamy