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 파일로 복사되었습니다