차리토 실험실

C언어 예제 #9 (파일 다루기)

수차리토 2023. 3. 31. 20:54

파일 다루기 함수

C언어에서 파일 다루기를 위해서는 다음과 같은 함수를 사용합니다.

  • fopen(): 파일을 열기 위한 함수입니다.
  • fclose(): 파일을 닫기 위한 함수입니다.
  • fprintf(): 파일에 쓰기 위한 함수입니다.
  • fscanf(): 파일에서 읽기 위한 함수입니다.

위의 함수들은 <stdio.h> 헤더 파일에 정의되어 있습니다.

 

파일 열기(fopen)

파일을 다루기 위해서는 파일을 열어야 합니다. 이때 사용하는 함수가 fopen() 함수입니다. 파일을 열 때는 파일명과 파일 열기 모드를 지정해야 합니다. 파일 열기 모드는 파일에 대한 다양한 작업을 할 때 필요한 모드입니다. 아래는 파일 열기 모드의 종류와 그 의미입니다.

  • r : 읽기 모드로 파일을 엽니다. 파일이 없으면 NULL을 반환합니다.
  • w : 쓰기 모드로 파일을 엽니다. 파일이 없으면 새로운 파일을 생성하고, 파일이 이미 있으면 그 내용을 모두 지우고 새로 씁니다.
  • a : 쓰기 모드로 파일을 엽니다. 파일이 없으면 새로운 파일을 생성하고, 파일이 이미 있으면 그 뒤에 쓰기 작업을 수행합니다.
  • r+ : 읽기와 쓰기 모드로 파일을 엽니다. 파일이 없으면 NULL을 반환합니다.
  • w+ : 읽기와 쓰기 모드로 파일을 엽니다. 파일이 없으면 새로운 파일을 생성하고, 파일이 이미 있으면 그 내용을 모두 지우고 새로 씁니다.
  • a+ : 읽기와 쓰기 모드로 파일을 엽니다. 파일이 없으면 새로운 파일을 생성하고, 파일이 이미 있으면 그 뒤에 쓰기 작업을 수행합니다.

예를 들어, 파일명이 "sample.txt"이고 쓰기 모드로 파일을 열 경우, 다음과 같이 fopen() 함수를 사용합니다.

FILE *fp = fopen("sample.txt", "w");

파일 닫기(fclose)

파일을 다룬 후에는 파일을 닫아야 합니다. 파일을 닫을 때는 fclose() 함수를 사용합니다. fclose() 함수는 파일 포인터를 인수로 받습니다. 아래는 파일을 닫는 예시 코드입니다.

 

int fclose(FILE *stream);

stream은 파일을 가리키는 포인터입니다. 파일을 닫으면 0을 반환합니다. 파일을 닫을 때, 파일에 대한 변경 사항을 디스크에 쓰도록 하는 것을 "flush"라고 합니다

 

파일에 쓰기(fprintf)

 

fprintf() 함수는 파일에 데이터를 쓰기 위해 사용됩니다. 이 함수는 printf() 함수와 비슷하지만, 출력 대상이 표준 출력이 아니라 파일이라는 것이 다릅니다.

fprintf() 함수의 기본 구조는 다음과 같습니다.

 

int fprintf(FILE *fp, const char *format, ...)

위 구조에서 첫 번째 인자는 출력할 파일 포인터입니다. 두 번째 인자는 출력할 문자열 형식을 지정하는 문자열입니다. 나머지 인자는 문자열에 대응하는 값입니다.

다음은 파일에 문자열과 숫자를 쓰는 간단한 예제입니다.

 

#include <stdio.h>

int main() {
    FILE *fp;
    fp = fopen("example.txt", "w");   // 쓰기 모드로 파일 열기

    // 파일에 문자열 쓰기
    fprintf(fp, "Hello, world!\n");

    // 파일에 숫자 쓰기
    int num = 123;
    fprintf(fp, "num = %d\n", num);

    fclose(fp);   // 파일 닫기

    return 0;
}

위 예제에서는 파일 포인터로 example.txt 파일을 쓰기 모드("w")로 열고, fprintf() 함수를 사용하여 파일에 문자열과 숫자를 씁니다. 마지막으로 파일을 닫습니다.

 

파일에서 읽기(fscanf)

fscanf() 함수는 파일에서 데이터를 읽어오기 위해 사용됩니다. 이 함수는 scanf() 함수와 비슷하지만, 입력 대상이 키보드 입력이 아니라 파일이라는 것이 다릅니다.

fscanf() 함수의 기본 구조는 다음과 같습니다.

 

int fscanf(FILE *fp, const char *format, ...)

위 구조에서 첫 번째 인자는 입력할 파일 포인터입니다. 두 번째 인자는 입력할 문자열 형식을 지정하는 문자열입니다. 나머지 인자는 문자열에 대응하는 변수입니다.

다음은 파일에서 문자열과 숫자를 읽어오는 간단한 예제입니다.

 

#include <stdio.h>

int main() {
    FILE *fp;
    fp = fopen("example.txt", "r");   // 읽기 모드로 파일 열기

    // 파일에서 문자열 읽어오기
    char str[100];
    fscanf(fp, "%s", str);
    printf("str: %s\n", str);

    // 파일에서 숫자 읽어오기
    int num;
    fscanf(fp, "%d", &num);
    printf("num: %d\n", num);

    fclose(fp);   // 파일 닫기

    return 0;
}

위 예제에서는 파일 포인터로 example.txt 파일을 읽기 모드("r")로 열고, fscanf() 함수를 사용하여 파일에서 문자열과 숫자를 읽어옵니다. 마지막으로 파일을 닫습니다.