Input Stream Member — Funkcje
Strumień wejściowy funkcji elementów członkowskich są używane do wprowadzania dysku.Funkcje składowe:
Funkcji open dla strumieni danych wejściowych
Get, funkcja
Getline, funkcja
Funkcja odczytu
Funkcje seekg i tellg
Funkcja close dla strumieni danych wejściowych
Funkcji open dla strumieni danych wejściowych
Jeśli używasz strumienia wejściowego pliku (ifstream), musisz skojarzyć strumienia z pliku określonego dysku.Można to zrobić w konstruktorze lub użyć Otwórz funkcji.W obu przypadkach argumenty są takie same.
Ogólnie określić ios_base::openmode Flaga podczas otwierania pliku skojarzonego z strumień wejściowy (jest to domyślny tryb ios::in).Aby uzyskać listę open_mode zobaczyć flagi, funkcji open.Flagi mogą być łączone z logiczną lub operatora (|).
Aby odczytać plik, należy najpierw użyć się niepowodzeniem funkcji członka, aby ustalić, czy istnieje:
istream ifile( "FILENAME" );
if ( ifile.fail() )
// The file does not exist ...
Get, funkcja
Niesformatowany się funkcji składowej działa jak >> operatora z dwoma wyjątkami.Pierwszy, się funkcja zawiera znaki spacji należy ekstraktor wyklucza odstępu po skipws flagę (domyślnie).Drugi, się funkcja jest mniej prawdopodobne, aby spowodować strumienia wyjściowego wiązanej (cout, na przykład) do opróżnienia.
Odmianą się funkcja określa adres buforu i maksymalną liczbę znaków do odczytu.Jest to przydatne do ograniczania liczby znaków wysłanych do określonej zmiennej, jak widzimy w przykładzie:
// 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;
}
Dane wejściowe
1234
Przykładowe dane wyjściowe
1234
Getline, funkcja
Getline jest podobna do funkcji członka się funkcji.Obie te funkcje pozwalają trzeciego argumentu, który określa znak dla danych wejściowych.Wartością domyślną jest znak nowego wiersza.Obie funkcje zarezerwować jeden znak dla wymaganego znaku końca.Jednakże się pozostawia znak w strumieniu i getline usuwa znak odcinające.
W następującym przykładzie określono znak odcinające dla strumień wejściowy:
// 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;
}
Dane wejściowe
test
Funkcja odczytu
Przeczytać funkcji składowej odczytuje bajty z pliku do określonego obszaru pamięci.Długość argumentu określa liczbę bajtów odczytanych.Jeżeli nie dołączono tego argumentu, czytanie zatrzymuje się po osiągnięciu fizyczny koniec pliku lub, w przypadku pliku trybu tekstowego, gdy osadzony EOF znak jest do odczytu.
W tym przykładzie odczytuje binarne rekordu z pliku listy płac w strukturę:
#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 zakłada, że rekordy danych są sformatowane dokładnie określone przez konstrukcję bez zakończeń znaków powrotu karetki i wysuwu wiersza.
Funkcje seekg i tellg
Plik wejściowy strumieni zachować wewnętrzny wskaźnik do pozycji, w których dane są odczytywane następny plik.Ustawienia tego wskaźnika z seekg funkcji, jak pokazano poniżej:
#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;
}
}
Aby użyć seekg do wdrożenia systemów zarządzania zorientowane na zapis danych, należy pomnożyć rozmiar rekordu o stałej długości, przez numer rekordu w celu uzyskania pozycję bajtu koniec pliku, a następnie użyj się obiekt, aby odczytać rekordu.
tellg Funkcji składowej zwraca bieżącą pozycję pliku do odczytu.Ta wartość jest typu streampos, typedef określonych w <iostream>.W poniższym przykładzie odczytuje plik i wyświetla komunikaty informujące pozycje spacji.
#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;
}
}
Funkcja close dla strumieni danych wejściowych
Zamknąć funkcji składowej zamyka skojarzone z strumienia pliku wejściowego pliku dyskowego i zwalnia dojście do pliku systemu operacyjnego.Ifstream destruktora zamyka plik dla Ciebie, ale można użyć zamknąć działać, jeśli to konieczne jest otwarcie innego pliku dla tego samego obiektu strumienia.