<객체> 12. 파일 입출력

정지민·2023년 12월 1일
0

객체 프로그래밍

목록 보기
11/11

텍스트 파일

사람들이 사용하는 글자 혹은 문자들로만 구성되는 파일
'\n', '\t' 등의 특수 문자도 포함
각 문자마다 문자 코드(이진수) 할당
Enter키를 입력하면 텍스트 파일에는 ‘\r’, ‘\n’의 두 코드가 기록됨

바이너리 파일

문자로 표현되지 않는 바이너리 데이터가 기록된 파일
텍스트 파일의 각 바이트 -> 문자로 해석
바이너리 파일의 각 바이트 -> 문자로 해석되지 않는 것도 있음
hwp 파일은 바이너리 파일이다.

파일 입출력 스트림은 파일을 프로그램과 연결

  • >> 연산자와 istream의 get, read() 함수
    - 연결된 장치로부터 읽는 함수
    - 키보드에 연결되면 키 입력을, 파일에 연결되면 파일에서 입력
  • << 연산자와 ostream의 put(), write() 함수
    - 연결된 장치에 쓰는 함수
    - 스크린에 연결되면 화면에, 파일에 연결되면 파일에 출력

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

텍스트 I/O

문자 단위로 파일에 쓰기, 파일에서 읽기
문자를 기록하고, 읽은 바이트를 문자로 해석
텍스트 파일에만 적용

바이너리 I/O

바이트 단위로 파일에 쓰기, 파일에서 읽기
데이터를 문자로 해석하지 않고 있는 그대로 기록하거나 읽음
텍스트 파일과 바이너리 파일 모두 입출력 가능

텍스트 I/O와 바이너리 I/O 입출력 시 차이점

개형 문자(‘\n’)를 다루는데 있음

파일 모드

파일 입출력에 대한 구체적인 작업 행태에 대한 지정
open(“파일이름”, 파일모드)
ifstream(“파일이름”, 파일모드)
ofstream(“파일이름”, 파일모드)

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

istream의 getline(char* line, int n) 함수 이용
getline(ifstream& fin, string& line) 함수 이용

바이너리 I/O

데이터의 바이너리 값을 그대로 파일에 저장하거나, 파일의 바이너리 값을 그대로 읽어서 변수나 버퍼에 저장하는 방식
텍스트 파일이든 바이너리 파일이든 바이너리 I/O로 입출력가능
ios::binary 모드 속성 사용

read()/write()로 블록 단위 파일 입출력

  • get()/put()
    문자 혹은 바이트 단위로 파일 입출력
  • read()/write()
    블록 단위로 파일 입출력

텍스트 I/O와 바이너리 I/O의 확실한 차이점

  • 파일의 끝을 처리하는 방법에는 차이가 없다.
    - 텍스트 I/O 든 바이너리 I/O 든 파일의 끝을 만나면 EOF 리턴
  • 개행 문자 ‘\n’를 읽고 쓸 때 서로 다르게 작동한다.

스트림 상태 검사

  • 파일 입출력이 진행되는 동안 스트림(열어 놓은 파일)에 관한 입출력 오류 저장
    - 스트림 상태를 저장하는 멤버 변수 이용

임의 접근과 파일 포인터

  • C++ 파일 입출력 방식
    - 순차 접근
    - 임의 접근

파일 포인터
- 파일은 연속된 바이트의 집합
- 파일 포인터

- C++는 열려진 파일마다 두 개의 파일 포인터 유지
	- get pointer : 파일 내에 다음에 읽을 위치
	- put pointer : 파일 내에 다음에 쓸 위치

0개의 댓글