내용 출처 : YES C (정보공학연구소 /생능출판사)
혼자 연구하는 C/C++ (SoEn.kr /와우북스)
Ⅰ. 파일 열고 닫기
① 파일에 데이터를 입출력하려면 제일 먼저 파일을 열어서 실행중인 프로그램과 파일간의 스트림을 연결해야한다.
② 파일을 열고 작업이 끝나면 파일을 닫아 스트림을 닫아주어야 작업이 파일에 저장된다.
③ 고수준의 입출력에서는 이 스트림을 FP(파일포인터)로 관리한다.
④ 고수준의 입출력에서 파일을 여는 함수는 fopen_s()이고 닫는 함수는 fclose()이다.
⑤ fopen()의 경우 파일을 열고 FP값을 반환값으로 주기 때문에 이를 저장하지 않는 실수를 할 수도 있었지만,
fopen_s()의 경우 FP값을 첫번째 인자로 요구하기 때문에 그럴수가 없다.
Ⅱ. fopen_s()/fclose()
① 원형과 사용 예
//원형 errno_t fopen_s (FILE** _stream, char const* _FileName, char const* _mode); int fclose (FILE* _Stream); //사용 예 FILE* fp; fopen_s(&f, "Test.txt", "rt"); fclose(f);
② fopen_s()의 리턴타입은 errno_t로 vs에서 에러정보를 표현하기 위해 사용하는 정수값이다. (참조 : errno_t타입)
③ fopen_s()는 첫번째 인자로 파일포인터의 주소값을 요구해서 파일구조체의 주소값을 파일포인터에 직접 넣어준다.
④ fopen_s()가 요구하는 두번째 인자는 스트림을 연결할 파일의 주소가 적힌 문자열이다.
⑤ 주소는 절대 주소로 입력해도 되고, 상대 주소로 입력해도 된다.
⑥ fopen_s()가 요구하는 세번째 인자는 모드를 지정하는 문자열로, 파일을 열어서 어떤 작업을 할 것인가와 파일 형태 등을 의미한다.
모드 |
설명 |
r |
읽기 전용으로 파일을 연다. 파일이 없을 경우 FP에 NULL을 저장한다. |
w |
쓰기 전용으로 파일을 연다. 파일이 없을 경우 새로 만들고, 있으면 지우고 새로 만든다. 도스나 윈도우즈에는 쓰기 전용 파일이 없지만, 스트림은 쓰기전용 상태로 열 수 있다. |
a |
내용 추가를 위해 쓰기 전용으로 파일을 연다. 파일이 없을 경우 새로 만들고, 있으면 파일을 열어 FP를 가장 끝으로 보낸다. |
r+ |
읽고 쓰기가 가능하도록 파일을 연다. 파일이 없을 경우 FP에 NULL을 저장한다. |
w+ |
읽고 쓰기가 가능하도록 파일을 연다. 파일이 없을 경우 새로 만든다. 있으면 지우고 새로 만든다. |
a+ |
읽고 추가가 가능하도록 파일을 연다. 파일이 없을 경우 새로 만든다. |
플래그 |
파일 형태 |
생략 |
전역변수 _fmode에 설정된 값. 기본 설정은 텍스트(text) 모드 |
t |
텍스트(text) 모드 |
b | 이진(binary) 모드 |
⑦ "rt", "wb", "a+b", "at+" 등으로 쓰면 된다. (더 상세한 모드 지정에 대한 내용은 MSDN(링크)을 참조.)
⑧ 이진 모드는 아무런 변환없이 내용을 읽지만, 텍스트 모드에서는
1) 읽을 때 CR/LF는 LF로, 쓸때는 반대로 변환한다.
2) 파일의 끝을 나타내는 Ctrl+Z(0x1A)는 EOF(-1)로 변환된다. 내용 추가일 때는 Ctrl+Z를 제거한다.
⑨ fclose()는 FP를 인자로 받아 버퍼에 남아있는 데이터를 파일로 완전히 출력(flush)하고 FILE 구조체를 해제한다.