다음을 통해 공유


입력 스트림 구성원 함수

입력 스트림 멤버 함수는 디스크 입력에 사용됩니다.

open

입력 파일 스트림(ifstream)을 사용하는 경우 해당 스트림을 특정 디스크 파일과 연결해야 합니다. 생성자에서 이 작업을 수행하거나 함수를 open 사용할 수 있습니다. 두 경우 모두 인수는 동일합니다.

일반적으로 입력 스트림과 연결된 파일을 열 때 플래그를 지정 ios_base::openmode 합니다(기본 모드는 ios::in). 플래그 목록은 다음을 openmode 참조하세요 ios_base::openmode. 플래그는 비트 "or" (|) 연산자를 사용하여 결합할 수 있습니다.

파일을 읽으려면 먼저 멤버 함수를 fail 사용하여 파일이 있는지 확인합니다.

istream ifile("FILENAME");

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

get

형식이 지정되지 않은 멤버 함수는 get 두 가지 예외가 있는 연산자 >> 처럼 작동합니다. 먼저 함수는 get 공백 문자를 포함하는 반면, 플래그가 설정될 때 skipws 추출기는 공백을 제외합니다(기본값). 둘째, 함수는 get 연결된 출력 스트림(cout예: 플러시)을 발생시킬 가능성이 적습니다.

함수의 변형은 get 버퍼 주소와 읽을 최대 문자 수를 지정합니다. 이 함수는 다음 예제와 같이 특정 변수로 전송되는 문자 수를 제한하는 데 유용합니다.

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

입력

1234

샘플 출력

1234

getline

getline 멤버 함수는 함수와 get 비슷합니다. 두 함수 모두 입력에 대해 종료 문자를 지정하는 세 번째 인수를 허용합니다. 기본값은 줄 바꿈 문자입니다. 두 함수 모두 필요한 종료 문자에 대해 문자 하나를 예약합니다. 그러나 get 종료 문자를 스트림 getline 에 두고 종료 문자를 제거합니다.

다음 예제에서는 입력 스트림에 대해 종료 문자를 지정합니다.

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

입력

test

read

멤버 함수는 read 파일에서 지정된 메모리 영역으로 바이트를 읽습니다. 길이 인수가 읽은 바이트 수를 결정합니다. 해당 인수를 포함하지 않으면 파일의 실제 끝에 도달하거나 텍스트 모드 파일의 경우 포함된 EOF 문자를 읽을 때 읽기가 중지됩니다.

다음 예제에서는 급여 파일에서 구조로 이진 레코드를 읽어 옵니다.

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

이 프로그램은 데이터 레코드가 종결 캐리지 리턴 또는 줄 바꿈 문자 없이 구조체에서 지정한 대로 정확하게 형식이 지정된다고 가정합니다.

seekgtellg

입력 파일 스트림은 파일에서 다음에 읽을 데이터의 위치로 내부 포인터를 유지합니다. 다음과 같이 seekg 함수로 이 포인터를 설정합니다.

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

레코드 지향 데이터 관리 시스템을 구현하는 데 사용 seekg 하려면 고정 길이 레코드 크기를 레코드 번호로 곱하여 파일의 끝을 기준으로 바이트 위치를 가져온 다음 개체를 사용하여 get 레코드를 읽습니다.

tellg 멤버 함수는 읽기를 위해 현재 파일 위치를 반환합니다. 이 값은 에 정의된 <iostream>형식streampos입니다typedef. 다음 예제에서는 파일을 읽고 공백의 위치를 보여 주는 메시지를 표시합니다.

#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

멤버 함수는 close 입력 파일 스트림과 연결된 디스크 파일을 닫고 운영 체제 파일 핸들을 해제합니다. ifstream 소멸자가 파일을 닫지만 동일한 스트림 개체에 close 대해 다른 파일을 열어야 하는 경우 함수를 사용할 수 있습니다.

참고 항목

입력 스트림