Č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.