본문 바로가기
Programming/C++

[C++] ifstream 클래스

by ★용호★ 2013. 4. 11.

2013년 1월 7일 

 

임시로 파일을 읽어들이는 부분이 필요해서 ifstream에 대해 공부해보게 됐다.

전부터 파일 입출력은 좀 꺼려졌었는데 이 참에 한번 파보자고 마음 먹었다.

 

먼저 ifstream은 싱글 바이트 문자 데이터를 순차적으로 파일에서 읽는데 사용할 스트림을 정의 한다.
basic_ifstream 클래스가 typedef 된 형태이다.

 

 예제소스

std::ifstream infile;
infile.open( "..Data.csv", std::ios::in | std::ios::binary );

if( !infile.is_open() )

{

return false;

}

char szLine[4096] = { 0, };

infile.getline( szLine, 4096 );

printf( "%s", szLine );

 

open함수로 파일을 열게 되는데 성공/실패 값을 반환할 줄 알았더니만 반환타입이 void다..

함수를 찾아보니 is_open() 함수가 있었다.

 

open 함수를 이용해서 파일을 열고 is_open() 함수를 통해 파일이 제대로 열렸는지 여부를 확인하면 된다.

 

getline()함수로 한 줄을 읽어들인다.

good(), eof(), fail(), bad() 함수를 통해서 현재 파일 스트림의 상태를 체크해볼 수 있는데
eof,fail,bad는 비트 플래그로 되어 있다.
good은 이 세가지 비트 플래그가 모두 true일때 true를 반환하고 하나라도 false이면 false를 반환하게 된다.
bad 플래그는 스트림의 완전성이 깨질 경우에 true가 되는데 하나의 스트림에 동시의 두개의 다른 작업이 진행 될 때 발생하는 것이다.
fail 플래그는 논리 오류가 발생했을때 설정이 된다. 예를 들면 받고자 하는 값은 int형인데 문자형을 받았을 경우 failbit이 설정된다.
failbit이 설정되더라도 입출력이 가능하지만 badbit이 발생한다면 입출력이 불가능해진다. 

 

 

- 아래 표는 어디선가 퍼왔다..

 

 Public 멤버

 생성자 - 객체를 생성하며 부가적으로 파일과 연관시킬 수 있다.
rdbuf  :  filebuf 객체를 얻는다.
is_open :  파일이 열려있는지 확인한다.
open  :  파일을 연다.
close  :  파일을 닫는다.

 istream 으로 부터 상속 받은 멤버들

 operator>> :  서식화된 데이터를 추출(입력)한다.
gcount  :  마지막 서식화 되지 않은 입력에서 받아들였었던 문자의 개수를 구한다.
get  :  스트림으로 부터 서식화 되지 않은 데이터를 얻는다.
getline :  스트림으로 부터 한 줄을 입력받는다.
ignore :  문자들을 입력 받고 지운다.
peek :  그 다음으로 추출될 문자를 얻어온다. 
read  :  데이터 블록을 읽는다. 
readsome  :  버퍼에서 읽기 가능한 데이터 블록을 읽어온다.
putback  :  문자를 다시 집어넣는다. 

unget :  get pointer 을 감소 시킨다.
tellg  :  get pointer 의 위치를 얻는다.
seekg  :  get pointer 의 위치를 설정한다.
sync  :  입력 버퍼를 문자들의 소스에 동기화 시킨다.
sentry  :  예외로 부터 안전한 접두/접미 작업을 수행한다. (클래스)

 ios 로 부터 상속 받은 함수들

 good  :  스트림의 상태가 입출력 작업을 할 수 있는지 확인한다.
eof  :  eof 비트가 설정되었는지 확인한다.
fail  :  fail 비트나 bad 비트가 설정되었는지 확인한다.
bad :  bad 비트가 설정되었는지 확인한다.
operator! :  스트림 객체에 오류 플래그(fail 비트나 bad 비트)가 설정되었는지 확인한다.
operator void* :  포인터로 변환한다.
rdstate  :  오류 상태 플래그(error state flag)를 얻어온다.
setstate  :  오류 상태 플래그를 설정한다.
clear  :   오류 상태 플래그들을 설정한다
copyfmt  :  서식 정보를 복사한다.
fill :  채우기 문자(fill character) 을 얻거나 설정한다.
exceptions :  예외 마스크를 얻거나 설정한다.  
imbue :  로케일을 설정한다.

tie  :  엮어진 스트림(tied stream)을 얻거나 설정한다.

rdbuf  :  연관된 스트림 버퍼를 얻거나 설정한다.
narrow  : 표준 char 형으로 문자를 변환한다.
widen :  표준 wchar_t 형으로 문자를 변환한다.

 ios_base 로 부터 상속된 함수들

 flags :  서식 플래그를 수정하거나 얻어온다.
setf  :  특정 서식 플래그를 설정한다.

unsetf  :  특정 서식 플래그를 초기화 한다.

precision  :  부동 소수점 정밀도를 수정하거나 얻어온다.

width  :  필드의 너비를 수정하거나 얻어온다
imbue  :  로케일을 채운다.
getloc  :  현재 로케일을 얻어온다
xalloc  :  내부 확장 가능 배열의 새로운 인덱스를 리턴한다. (정적 함수)
iword  :  내부 확장 가능 배열의 특정 정수 원소의 레퍼런스를 얻는다.
pword  :  내부 확장 가능 배열의 포인터의 레퍼런스를 얻는다.
register_callback  :  이벤트 콜백 함수를 등록한다.
sync_with_stdio :  iostream 과 cstdio 스트림과의 동기화를 활성화 하거나 비활성화 한다.

댓글