파일 입출력

프로그램에서 활용하는 데이터는 프로그램이 종료되면 다시 사용할 수 없습니다.

이 데이터들은 저장이 되지 않는 휘발성 데이터이기 때문이죠.

데이터를 프로그램이 종료되어도 유지시키고 싶은 경우엔 파일에 저장하여 활용할 수 있습니다.

이때 활용하는 방식이 파일 입출력 입니다.


fileIO

파일 입출력을 위해서는 위 3가지 단계를 거쳐야 합니다.

수정 가능한 파일 방식은 txt 파일, binary 파일입니다.


파일 포인터

FILE *file = NULL;

파일 입출력을 위해 c언어에서는 파일 포인터를 활용합니다.

이 파일 포인터는, 일반 텍스트 편집기의 작성 위치를 나타내는 커서처럼

편집 위치를 제어하는 역할을 가지고 있습니다.


EOF

if (fscanf(FILE *, "%d %d",&value, &value1) == EOF)

EOFEnd Of File의 약자로, 현 위치에서 더 읽을 내용이 없음을 나타냅니다.

fscanf()함수에서 더 이상 읽을 데이터가 없을때, 함수는 EOFreturn합니다.


feof()

if (feof(file))

해당 파일이 EOF(더 읽을 내용이 없음)상태인지 판단하는 함수입니다.

EOF 상태일 때, feof()함수는 1 (true)return 합니다.


fseek()

fseek(FILE*, 위치 기준 바이트 위치, 위치)

파일을 읽는 파일 포인터를 조정하는 함수입니다.

위치에 들어갈 데이터는 3가지가 있습니다. SEEK_SET -> 첫 위치 SEEK_CUR -> 현 위치 SEEK_END -> 끝 위치


fseek(fp, 0, SEEK_END); 

파일 포인터의 위치를 끝위치로 이동하는 예제 코드 입니다.


파일 열기

fopen()

file = fopen("text.txt", "w");

파일을 여는 기본적인 함수입니다.

fopen

c언어 코드 파일을 기준으로 경로를 지정할 수 있으며, 파일 이름을 입력하여 파일을 열 수 있습니다.


개방모드 openmode

"r" : 읽기 모드 -> 파일이 없으면 NULL
"w" : 쓰기 모드 -> 파일이 없으면 생성, 있으면 모든 내용 제거 이후 작성
"a" : 이어 쓰기 모드 -> 파일의 내용 뒷부분 부터 작성 가능
"+" : 읽기, 쓰기

fopen함수 두번째 매개변수로 들어가는 설정 값입니다.

파일을 활용할 방식을 지정할 수 있습니다.


file = fopen("text.txt", "wt");

기본적으로 텍스트 파일을 편집할 때는 개방모드뒤에 t를 붙여서 작성합니다.

바이너리 파일을 편집할 때는 개방모드 위에 b를 붙여서 작성합니다.

하지만 텍스트파일의 경우는 생략이 가능합니다.


파일 읽기, 쓰기


읽기

fscanf()

fscanf(FILE*, "%d", &i);

데이터를 읽는 함수입니다.

fsacnf

일반적인 입출력에 사용하는 scanf함수와 거의 비슷한 구조를 가지고 있습니다.

매개변수로 file이 들어가는 것이외에는 같은 구조입니다.

파일이 읽기모드로 열린 상태가 아니면 사용할 수 없습니다.


fgetc() / getc()

char value = fgetc(FILE*);
char value = getc(FILE*);

같은 기능을 하는 두 함수입니다.

파일에서 문자 하나(char)를 받아 return 합니다.


fgets()

fgets(str[], size, FILE*);

파일에서 한 줄을 받아 return 하는 함수.

줄바꿈 문자 ‘\n’ 을 읽어오는 경우가 있어 주의해야 한다.


쓰기


fprintf()

fprintf(FILE*, format, value);

파일에 데이터를 출력하는 함수입니다.

위에서 사용했던 fscanf()함수와 동일하게, 매개변수로 파일 포인터가 추가된 것 이외에는 다른것이 없습니다.

하지만 파일이 쓰기모드 (write mode)상태로 열린것이 아니라면 사용할 수 없습니다


fputc() / putc ()

fputc(char, FILE*);
putc(char, FILE*);

같은 기능을 하는 두 함수입니다.

파일에 문자 하나(char)를 출력 합니다.


fputs()

fputs(char*, FILE*);

파일에 문자열을 출력하는 함수입니다.

만약 문자열의 길이가 길어 fprintf()사용이 불편한 경우에 효율적으로 활용할 수 있습니다.

출력 마지막에 ‘\n’ 을 출력하지 않습니다.


파일 저장

fclose()

fclose(FILE*);

파일 포인터의 연결을 종료하며 파일이 저장됩니다.

만약 쓰기모드(write mode)에서 fclose()를 하지 않는다면, 파일이 저장되지 않습니다.



💡 지적 환영합니다

Comments