«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

ITGenerations

[c++]파일입출력 summary 본문

프로그래밍/c++ 명품프로그래밍

[c++]파일입출력 summary

ITGenerations 2018. 1. 6. 07:39

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


*글자 혹은 문자로만 구성되는  파일이 텍스트 파일이며, 문자와 그림, 표, 색, 그래픽 등을 저장하기 위해 문자가 아닌 바이너리 바이트가 저장된 파일이 바이너리 파일이다.

*<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() 함수를 사용한다.