ITGenerations
[c++]파일입출력 summary 본문
텍스트 파일과 바이너리 파일
*글자 혹은 문자로만 구성되는 파일이 텍스트 파일이며, 문자와 그림, 표, 색, 그래픽 등을 저장하기 위해 문자가 아닌 바이너리 바이트가 저장된 파일이 바이너리 파일이다.
*<Enter> 키를 입력하면 텍스트 파일에 '\r' '\n'의 두 문자 코드가 기록된다.
파일 입출력 개요
*c++ 표준은 파일 읽기를 위해 ifstream, 쓰기를 위해 ofstream, 읽기와 쓰기를 동시에 처리하는 fstream 클래스를 제공하며, 이들은 각각 istream, ostream, iostream을 상속받기 때문에 이들이 가진 입출력 함수를 모두 사용할 수 있다.
*파일 입출력 스트림 클래스는 파일을 프로그램과 연결한다.
*텍스트 I/O는 문자 단위로 읽고 쓰는 모드이며, 바이너리 I/O는 바이트 단위로 읽고 쓴다.
*<<와 >>연산자는 모두 텍스트 I/O로 텍스트 파일만 입출력한다.
*파일 입출력을 위해서는 스트림 객체를 생성하고, 읽거나 쓰고자하는 파일을 열어 스트림과 연결하고, 파일 읽기나 파일 쓰기를 진행하며, 마지마겡 스트림 즉, 파일을 닫아야 한다.
파일모드
*파일 모드는 파일을 열 때 지정하는 것으로 앞으로 있을 파일에 대한 입출력 방식을 뜻한다.
*파일 모드는 파일에서 읽을 것인지, 기존 내용을 지우고 처음부터 쓸 것인지, 파일의 맨 끝에 추가하여 쓸 것인지, 텍스트 I/O를 사용할 것인지 바이너리 I/O를 사용할 것인지 등을 지정한다.
멤버 함수를 이용한 텍스트 I/O
*get()은 파일에서 문자를 읽어 리턴하고, put()은 파일에 문자를 기록한다.
*EOF는 정수 -1로 선언되어 있는 상수로서, get()이 파일의 맨 마지막 바이트를 읽고 난 후 다음을 읽을 때 리턴하는 값이다. get()이 리턴한 값과 EOF를 비교하여 파일의 끝까지 읽었는지 판단한다.
바이너리I/O
*바이너리 I/O는 각 바이트를 바이너리 값 그대로 읽거나 기록하는 저수준 입출력 방식이다.
*get()은 바이너리 I/O로 작동하며 파일에서 한 바이트를 읽고, put()은 한 바이트를 기록한다.
*read()는 한 블록을 읽는 함수이며, 실제 읽은 바이트 수는 gcount() 함수로 알 수 있다.
*바이너리 I/O와 텍스트 I/O는 파일의 끝을 인식하는 데에는 차이점이 없으며, '\n'을 읽거나 쓸 때 다르게 작동한다. 바이너리 I/O에서 '\n'을 기록하면 '\n'만 저장되지만 텍스트 I/O의 경우 '\r','\n'의 두 문자가 저장된다. 또한 바이너리 I/O로 파일에서 '\r', '\n'의 두 문자를 나란히 읽을 때 두 문자를 그대로 읽어 오지만, 텍스트 I/O의 경우 '\r', '\n'의 두 문자를 읽고 '\n'만 리턴한다.
스트림 상태 검사
*파일 입출력 시스템은 입출력이 진행되는 동안 오류 상태를 멤버 변수에 저장한다.
*파일의 끝을 만났는지 (eof()), 오류가 발생하였는지(fail())등을 리턴하는 함수를 제공한다.
임의 접근
*임의 접근이란 파일 내에 원하는 위치로 옮겨 다니면서 입출력하는 방식이다.
*파일 포인터는 파일 내에 다음에 읽거나 쓸 위치를 가리키는 인덱스(마크)이다.
*c++ 파일 포인터는 다음에 읽을 위치를 가리키는 get pointer와 쓸 위치를 가리키는 put pointer를 따로 유지한다.
입출력 함수가 실행되면 파일 포인터는 항상 읽거나 쓴 바이트만큼 증가한다.
*seekg(), seekp()를 이용하면 읽거나 쓰기 전에 파일 포인터를 파일 내의 임의의 위치로 옮긴다.
*get pointer, put pointer의 위치를 알아내기 위해 tellg(), tellp() 함수를 사용한다.
'프로그래밍 > c++ 명품프로그래밍 ' 카테고리의 다른 글
[c++] summary 예외처리와 C언어와의 링크 지정 (0) | 2018.01.06 |
---|---|
[c++] Summary 입출력 시스템 요 (0) | 2018.01.04 |
[c++] 매개 변수 없는 조작자 (0) | 2018.01.04 |
[c++] summary of 가상함수와 추상클래스 (0) | 2018.01.03 |
[c++] 추상클래스, 순수가상함수 (0) | 2018.01.03 |