파일 처리는 프로그래밍에서 데이터를 저장하고 읽어오는 데 필수적인 요소입니다. C 언어에서는 파일 입출력을 위한 강력한 기능을 제공합니다. 이번 글에서는 C 언어에서 텍스트 파일과 바이너리 파일을 다루는 방법과 파일 포인터의 사용법에 대해 자세히 설명하겠습니다.
1. 파일 처리의 기본 개념
파일은 데이터를 저장하는 데 사용되는 단위입니다. C 언어에서는 파일을 처리하기 위해 stdio.h
헤더 파일에 정의된 함수들을 사용합니다. 파일 처리의 기본 단계는 다음과 같습니다:
- 파일 열기 (
fopen
) - 파일 읽기 또는 쓰기
- 파일 닫기 (
fclose
)
파일을 열거나 작업할 때는 파일의 경로나 이름과 함께 모드를 지정해야 합니다. 대표적인 파일 모드는 다음과 같습니다:
모드 | 설명 |
---|---|
r |
읽기 전용으로 파일 열기 |
w |
쓰기 전용으로 파일 열기 |
a |
추가 모드로 파일 열기 |
rb |
바이너리 파일 읽기 |
wb |
바이너리 파일 쓰기 |
ab |
바이너리 파일 추가 쓰기 |
2. 텍스트 파일 입출력
텍스트 파일은 사람이 읽을 수 있는 형식으로 데이터를 저장합니다. 텍스트 파일을 다룰 때 주로 사용하는 함수는 fprintf
, fscanf
, fgets
, fputs
등입니다.
2.1 텍스트 파일 쓰기 예제
#include <stdio.h>
int main() {
FILE *file = fopen("example.txt", "w");
if (file == NULL) {
perror("파일 열기 실패");
return 1;
}
fprintf(file, "안녕하세요!\n");
fprintf(file, "C 언어의 파일 처리를 배우고 있습니다.\n");
fclose(file);
printf("파일에 데이터 쓰기 완료\n");
return 0;
}
2.2 텍스트 파일 읽기 예제
#include <stdio.h>
int main() {
FILE *file = fopen("example.txt", "r");
if (file == NULL) {
perror("파일 열기 실패");
return 1;
}
char buffer[256];
while (fgets(buffer, sizeof(buffer), file) != NULL) {
printf("%s", buffer);
}
fclose(file);
return 0;
}
주요 함수 설명
fopen
: 파일 열기fprintf
: 파일에 포맷 지정하여 쓰기fgets
: 파일에서 문자열 읽기fclose
: 파일 닫기
3. 바이너리 파일 입출력
바이너리 파일은 데이터를 이진 형식으로 저장합니다. 이진 데이터는 텍스트로 표현하기 어려운 데이터(예: 이미지, 오디오)를 저장하는 데 유용합니다. C 언어에서 바이너리 파일을 다룰 때 주로 사용하는 함수는 fwrite
, fread
입니다.
3.1 바이너리 파일 쓰기 예제
#include <stdio.h>
int main() {
FILE *file = fopen("data.bin", "wb");
if (file == NULL) {
perror("파일 열기 실패");
return 1;
}
int numbers[] = {1, 2, 3, 4, 5};
fwrite(numbers, sizeof(int), 5, file);
fclose(file);
printf("바이너리 파일에 데이터 쓰기 완료\n");
return 0;
}
3.2 바이너리 파일 읽기 예제
#include <stdio.h>
int main() {
FILE *file = fopen("data.bin", "rb");
if (file == NULL) {
perror("파일 열기 실패");
return 1;
}
int numbers[5];
fread(numbers, sizeof(int), 5, file);
for (int i = 0; i < 5; i++) {
printf("%d ", numbers[i]);
}
printf("\n");
fclose(file);
return 0;
}
주요 함수 설명
fwrite
: 데이터를 바이너리 형식으로 쓰기fread
: 바이너리 데이터를 읽기
4. 파일 포인터의 사용법
파일 포인터는 파일에 대한 위치 정보를 제공합니다. 파일 포인터를 사용하여 파일의 특정 위치로 이동하거나 데이터를 처리할 수 있습니다.
4.1 파일 위치 이동 함수
fseek
: 파일 포인터를 특정 위치로 이동ftell
: 현재 파일 포인터의 위치 반환rewind
: 파일 포인터를 파일의 시작으로 이동
파일 포인터 사용 예제
#include <stdio.h>
int main() {
FILE *file = fopen("example.txt", "r");
if (file == NULL) {
perror("파일 열기 실패");
return 1;
}
fseek(file, 0, SEEK_END);
long file_size = ftell(file);
rewind(file);
printf("파일 크기: %ld 바이트\n", file_size);
fclose(file);
return 0;
}
5. 파일 처리 시 주의 사항
- 파일 열기 오류 처리: 파일이 존재하지 않거나 열기 권한이 없는 경우를 대비하여 반드시 오류 처리를 해야 합니다.
- 파일 닫기: 열려 있는 파일은 작업이 끝나면 반드시 닫아야 합니다.
- 데이터 무결성 유지: 텍스트와 바이너리 파일의 데이터를 처리할 때 데이터 손상이 발생하지 않도록 주의해야 합니다.
6. 결론
C 언어의 파일 처리는 강력하고 유연한 기능을 제공합니다. 텍스트 파일과 바이너리 파일을 다루는 방법을 이해하고, 파일 포인터를 적절히 활용하면 다양한 파일 입출력 작업을 수행할 수 있습니다. 본문에서 제공한 예제를 활용하여 직접 파일 입출력 코드를 작성하고 실행해 보세요!
'c 언어' 카테고리의 다른 글
C 언어의 전처리기 (0) | 2024.12.14 |
---|---|
C 이중 포인터와 함수 포인터, 포인터 배열과 배열 포인터 (0) | 2024.12.14 |
C 언어의 동적 메모리 할당 (0) | 2024.12.14 |
C 언어의 구조체와 공용체 (0) | 2024.12.13 |
C 언어 함수 (0) | 2024.12.13 |