Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C 언어 파일 처리 완벽 가이드: 파일 열기, 읽기, 쓰기 및 모드 정리

C 언어에서는 파일을 대상으로 다양한 작업을 수행할 수 있습니다. 대표적인 파일 연산은 다음과 같습니다.

  • 파일 이름 지정(네이밍)
  • 파일 열기
  • 파일 읽기
  • 파일 쓰기
  • 파일 닫기

파일 열기 기본 문법

파일 포인터를 선언하고 파일을 여는 기본 문법은 다음과 같습니다.

FILE *파일포인터;

예를 들어 다음과 같이 선언할 수 있습니다.

FILE *fptr;

이후 fopen() 함수를 사용해 실제 파일을 엽니다.

파일포인터 = fopen("파일명", "모드");

실제 사용 예시는 아래와 같습니다.

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

파일 열기 모드의 종류

C 언어에서 파일을 열 때 사용하는 모드는 목적에 따라 여러 가지로 나뉩니다. 각 모드의 의미는 아래 표와 같습니다.

모드설명
r읽기 전용으로 파일을 엽니다.
w쓰기 전용으로 파일을 엽니다.
a덧붙이기(append) 모드로 파일을 엽니다.
r+읽기와 쓰기를 위해 파일을 엽니다.
w+쓰기와 읽기를 위해 파일을 엽니다.
a+덧붙이기와 읽기를 위해 파일을 엽니다.
rt텍스트 파일을 읽기용으로 엽니다.
wt텍스트 파일을 쓰기용으로 엽니다.
at텍스트 파일을 덧붙이기용으로 엽니다.
r+t텍스트 파일을 읽기·쓰기용으로 엽니다.
w+t텍스트 파일을 쓰기·읽기용으로 엽니다.
a+t텍스트 파일을 덧붙이기·읽기용으로 엽니다.
rb바이너리 파일을 읽기용으로 엽니다.
wb바이너리 파일을 쓰기용으로 엽니다.
ab바이너리 파일을 덧붙이기용으로 엽니다.
r+b바이너리 파일을 읽기·쓰기용으로 엽니다.
w+b바이너리 파일을 쓰기·읽기용으로 엽니다.
a+b바이너리 파일을 덧붙이기·읽기용으로 엽니다.

쓰기 모드(w)로 파일 열기

쓰기 모드로 파일을 여는 문법은 다음과 같습니다.

FILE *fp;
fp = fopen("sample.txt", "w");
  • 파일이 존재하지 않으면 새 파일이 생성됩니다.
  • 파일이 이미 존재하면 기존 내용은 모두 지워지고 새로운 내용만 저장됩니다.

읽기 모드(r)로 파일 열기

읽기 모드로 파일을 여는 문법은 다음과 같습니다.

FILE *fp;
fp = fopen("sample.txt", "r");
  • 파일이 존재하지 않으면 fopen() 함수는 NULL을 반환합니다.
  • 파일이 존재하면 파일로부터 데이터를 성공적으로 읽어옵니다.

덧붙이기 모드(a)로 파일 열기

덧붙이기 모드로 파일을 여는 문법은 다음과 같습니다.

FILE *fp;
fp = fopen("sample.txt", "a");
  • 파일이 존재하지 않으면 새 파일이 생성됩니다.
  • 파일이 존재하면 새로운 내용이 기존 내용 뒤에 추가됩니다.

모드별 동작 요약

파일이 존재하는 경우와 존재하지 않는 경우의 모드별 동작을 정리하면 다음과 같습니다.

모드파일이 존재할 때파일이 없을 때
r파일을 읽습니다.fp = NULL 반환
w기존 내용을 지우고 새 내용을 저장합니다.새 파일이 생성됩니다.
a기존 내용 뒤에 새 내용을 추가합니다.새 파일이 생성됩니다.

예제 프로그램

다음은 한 파일의 내용을 다른 파일로 복사하는 C 프로그램입니다.

// 한 파일의 내용을 다른 파일로 복사하는 프로그램
#include <stdio.h>
#include <stdlib.h> // exit() 함수 사용
int main(){
    FILE *fptr1, *fptr2;
    char filename[100], c;
    printf("읽을 파일 이름을 입력하세요 \n");
    scanf("%s", filename);
    // 한 파일을 읽기 모드로 열기
    fptr1 = fopen(filename, "r");
    if (fptr1 == NULL){
        printf("%s 파일을 열 수 없습니다 \n", filename);
        exit(0);
    }
    printf("쓸 파일 이름을 입력하세요 \n");
    scanf("%s", filename);
    // 다른 파일을 쓰기 모드로 열기
    fptr2 = fopen(filename, "w");
    if (fptr2 == NULL){
        printf("%s 파일을 열 수 없습니다 \n", filename);
        exit(0);
    }
    // 파일 내용 읽기
    c = fgetc(fptr1);
    while (c != EOF){
        fputc(c, fptr2);
        c = fgetc(fptr1);
    }
    printf("\n내용이 %s 파일로 복사되었습니다", filename);
    fclose(fptr1);
    fclose(fptr2);
    return 0;
}

실행 결과

위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.

읽을 파일 이름을 입력하세요
file2.txt
쓸 파일 이름을 입력하세요
file1.txt
내용이 file1.txt 파일로 복사되었습니다