본문 바로가기

프로그래밍

파일에 대한 오해 - 바이너리 모드 오픈, 텍스트 모드 오픈

그 어떠한 운영체제도 파일을 '텍스트 파일'과 '바이너리 파일'로 나누어서 구분 짓지 않는다. 운영체제 관점에서 파일은 단순히 파일일 뿐.

그러나 일반 프로그램 사용자 관점에서는 텍스트 파일과 바이너리 파일을 구분 짓는다.
파일에 텍스트 데이터가 저장이 되어 있어서 노트패드와 같은 텍스트 편집기로 읽을 수 있는 파일들을 텍스트 파일이라 하고, 그 이외의 파일들을 바이너피 파일이라 한다.

프로그램을 개발하는 이들은 운영체제의 관점에서, 컴퓨터 사용자 관점에서 해석해야 할 때가 있다.

운영체제 관점에서는 파일에 접근할 때, 텍스트 입출력 방식으로 접근할 것인지, 아니면 바이너리 입출력 방식으로 접근할 것인지를 구분 짓도록 하고 있다. 그것이 바로 '텍스트 모드 오픈'과 '바이너리 모드 오픈'의 차이점이다.

텍스트 모드로 오픈 한 파일에 데이터를 저장을 하건, 바이너리 모드로 오픈 한 파일에 저장을 하건 아스키 코드(문자)가 직접 저장되는 일은 발생하지 않는다. 다만 해당 문자의 아스키 코드 값이 저장될 뿐.

파일 모드에 따른 출력의 차이
- 텍스트 모드 파일 출력
(프로그램 상에서) ... \n -> (파일 상에서) ... \r\n
- 바이너리 모드 파일 출력
(프로그램 상에서) ... \n -> (파일 상에서) ... \n

파일 모드에 따른 입력의 차이
- 텍스트 모드 파일 입력
(프로그램 상에서) ... \n <- (파일 상에서) ... \r\n
- 바이너리 모드 파일 입력
(프로그램 상에서) ... \n <- (파일 상에서) ... \n

대상 파일이 바이너리 모드이건, 텍스트 모드이건, 
문자 및 문자열 관련해서 입출력을 해야 할 때에는
- fgetc, fputc, fgets, fputs, fscanf, fprintf
바이트 단위로 데이터를 저장하고자 한다면
- fread, fwrite