Udostępnij za pośrednictwem


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.

Zobacz też

Informacje

Strumienie wejściowe