Kong Eunho

C++ 파일 입출력

2025년 11월 27일 09시
카테고리 - LECTURE, 객체지향프로그래밍II


객체지향프로그래밍II(김정준) 13주차 강의내용

텍스트 파일과 바이너리 파일

파일 : 연속된 바이트의 집합.

텍스트 파일

바이너리 파일


C++ 표준 파일 입출력 라이브러리

istream, ostream의 부모 클래스인 ifstream, ofstream 사용 iostream의 부모 클래스인 fstream 사용

파일 입출력 모드 : 텍스트 I/O와 바이너리 I/O

① open(경로/파일이름, 용도지정)
② 읽기/쓰기
③ close()

ofstream fout;
fout.open("c:\\temp\\test.txt");
fout << "Hello World" << endl;
fout.close();
ifstream fin;
fin.open("c:\\temp\\test.txt");
fin >> text;
cout << text << endl;
fin.close();


파일 모드(file mode)

파일 모드 의미
ios::in 읽기 위해 파일을 연다.
ios::out 쓰기 위해 파일을 연다.
ios::ate (at end) 쓰기 위해 파일을 연다. 열기 후 파일 포인터를 파일 끝에 둔다. 파일 포인터를 옮겨 파일 내의 임의의 위치에 쓸 수 있다.
ios::app 파일 쓰기 시에만 적용된다. 파일 쓰기 시마다, 자동으로 파일 포인터가 파일 끝으로 옮겨져서 항상 파일의 끝에 쓰기가 이루어진다.
ios::trunc 파일을 열 때, 파일이 존재하면 파일의 내용을 모두 지워 파일 크기가 0인 상태로 만든다. ios::out 모드를 지정하면 디폴트로 함께 지정된다.
ios::binary 바이너리 I/O로 파일을 연다. 이 파일 모드가 지정되지 않으면 디폴트가 텍스트 I/O이다.
fout.open("student.txt", ios::out | ios::app); // out과 app 모드 동시 지정
while((c = fin.get()) != EOF) { // EOF를 만날 때까지 문자 읽기
  cout << (char)c;
}


텍스트 파일의 라인 단위 읽기

while(fin.getline(buf, 81)) { // 한 라인이 최대 80개의 문자로 구성
  cout << buf << endl; // 라인 출력
}


바이너리 I/O


스트림 상태

비트 설명
eofbit 파일의 끝을 만났을 때 1로 세팅
failbit 정수를 입력받고자 하였으나 문자열이 입력되는 등 포맷 오류나, 쓰기 금지된 곳에 쓰기를 시행하는 등 전반적인 I/O 실패 시에 1로 세팅
badbit 스트림이나 데이터가 손상되는 수준의 진단되지 않는 문제가 발생한 경우나 유효하지 않는 입출력 명령이 주어졌을 때 1로 세팅
멤버 함수 설명
eof() 파일의 끝을 만났을 때(eofbit=1) true 리턴
fail() failbit나 badbit가 1로 세팅되었을 때 true 리턴
bad() badbit이 1로 세팅되었을 때 true 리턴
good() 스트림이 정상적(모든 비트가 0)일 때 true 리턴
clear() 스트림 상태 변수를 0으로 지움


임의 접근과 파일 포인터

// 정수 값으로 주어진 절대 경로 pos로 get pointer를 옮김
istream& seekg(streampos pos)

// seekbase를 기준으로 offset만큼 떨어진 위치로 get pointer를 옮김
istream& seekg(streamoff offset, ios::seekdir seekbase)

// 정수 값으로 주어진 절대 경로 pos로 put pointer를 옮김
ostream& seekp(streampos pos)

// seekbase를 기준으로 offset만큼 떨어진 위치로 put pointer를 옮김
ostream& seekp(streamoff offset, ios::seekdir seekbase)

//입력 스트림의 현재 get pointer의 값 리턴
streampos tellg()

// 출력 스트림의 현재 put pointer의 값 리턴
streampos tellp()
seekbase 설명
ios::beg 파일의 처음 위치를 기준으로 파일 포인터를 움직인다.
ios::cur 현재 파일 포인터의 위치를 기준으로 파일 포인터를 움직인다.
ios::end 파일의 끝(EOF) 위치를 기준으로 파일 포인터를 움직인다.
◀ 이전 글 LECTURE, 인공지능개론
신경망
2025-11-25
목록으로 다음 글 ▶ LECTURE, 객체지향프로그래밍II
예외 처리와 링크 지정
2025-12-04