고급 C 프로그래밍 – 파일 처리와 디렉터리 다루기 – 0편: 파일 열기와 닫기
안녕하세요, C 언어 마스터를 향해 나아가는 여러분! 😊
오늘부터는 C 언어에서 파일을 읽고 쓰고 조작하는 법,
그리고 디렉터리 구조를 다루는 방법까지 깊이 있게 다뤄보는 시간을 가져볼 거예요.
그 시작으로 오늘은 파일 열기와 닫기,
즉, C 언어의 fopen()
과 fclose()
를 중심으로
파일 처리의 기초를 완전정복해보겠습니다!
🗂 “파일을 다루는 건 마치 금고를 여는 것과 같아요.
열고 → 사용하고 → 닫아야 하죠!”
1. 파일이란 무엇인가요?
파일은 우리가 프로그램 밖에서 데이터를 보관하는 공간이에요.
텍스트, 숫자, 구조체 등 어떤 데이터든 파일로 저장하고 다시 읽어올 수 있죠.
-
텍스트 파일:
.txt
,.csv
,.log
-
바이너리 파일:
.dat
,.bin
,.exe
등 -
-
2. 파일 처리 흐름 이해하기
C 언어에서 파일을 다룰 때는 다음의 3단계를 따릅니다.
-
파일 열기 (
fopen
) -
파일 사용 (입력/출력)
-
파일 닫기 (
fclose
)
💡 마치 문을 열고 들어가서 작업을 하고, 나갈 때 문을 닫는 것과 같죠!
3. 파일 열기: fopen()
기본 문법
c복사편집FILE *fopen(const char *filename, const char *mode);
-
filename
: 열 파일 경로 (상대/절대 경로 가능) -
mode
: 파일 열기 모드 (다음 섹션 참고) -
반환값: 성공 시 파일 포인터(
FILE*
), 실패 시NULL
-
-
4. 파일 열기 모드 종류
모드
의미
존재하지 않는 파일
"r"
읽기 전용
열기 실패
"w"
쓰기 전용
새로 생성
"a"
추가 전용
새로 생성
"r+"
읽기/쓰기
열기 실패
"w+"
읽기/쓰기
새로 생성
"a+"
읽기/추가
새로 생성
"rb"
이진 읽기
열기 실패
"wb"
이진 쓰기
새로 생성
📌 텍스트 파일은
"r"
,"w"
등을 사용하고,
바이너리 파일은"rb"
,"wb"
처럼 **’b’**를 붙여 사용합니다.
5. 파일 열기 예제
c복사편집#include <stdio.h>
int main() {
FILE *fp = fopen("data.txt", "r");
if (fp == NULL) {
printf("파일을 열 수 없습니다.
");
return 1;
}
// 파일 사용 코드 ...
fclose(fp);
return 0;
}
✅
fopen()
은 항상 반환값 NULL 체크를 해야 합니다!
파일이 없거나 권한이 없으면 실패할 수 있어요.
6. 파일 닫기: fclose()
파일을 다 사용한 후에는 반드시 닫아주어야 합니다.
c복사편집int fclose(FILE *stream);
-
반환값: 성공 시
0
, 실패 시 EOF (-1
) -
내부 버퍼가 있다면
fclose()
시 자동으로 **버퍼 플러시(flush)**까지 수행됨
예시
c복사편집FILE *fp = fopen("test.txt", "w");
// ... 파일에 쓰기 작업 ...
fclose(fp); // 닫기
🧠 파일을 열고 닫지 않으면 메모리 누수,
심지어는 데이터가 디스크에 저장되지 않을 수도 있어요!
7. fopen()과 fclose() 비유로 이해하기
-
fopen()
은 책을 책꽂이에서 꺼내서 펼치는 것 -
fclose()
는 다 읽고 책을 덮고 책꽂이에 다시 꽂는 것
✅ 책을 덮지 않으면 다음 사람이 읽기 어렵겠죠?
마찬가지로 파일도 반드시 닫아야 합니다!
8. 절대 경로 vs 상대 경로
c복사편집FILE *fp1 = fopen("log.txt", "w"); // 상대 경로
FILE *fp2 = fopen("C:/logs/log.txt", "w"); // 절대 경로
-
상대 경로: 현재 실행 디렉터리를 기준
-
절대 경로: 파일 시스템 루트부터 명시
Windows는
\\
또는/
, Linux는/
사용
9. fopen() 오류 처리 방법
파일 존재 여부 검사
c복사편집FILE *fp = fopen("data.txt", "r");
if (fp == NULL) {
perror("파일 열기 실패");
return 1;
}
perror()
는 시스템에서 오류 메시지를 자동 출력해줘서
디버깅에 매우 유용해요!
10. 실수 방지 꿀팁
실수
해결 방법
파일 닫지 않음
fclose()
는 꼭 함께 쓰기
NULL 체크 안 함
if (fp == NULL)
검사
잘못된 모드 사용
"r"
, "w"
, "a"
등의 의미 확실히 알기
잘못된 경로 입력
상대 경로 vs 절대 경로 확인하기
파일 이름 오타
.txt
, .csv
등 확장자 포함 주의
✅ 요약 정리
함수
설명
fopen()
파일 열기, 파일 포인터 반환
fclose()
파일 닫기, 버퍼 플러시도 자동 수행
모드
"r"
, "w"
, "a"
, "r+"
, "rb"
등 용도별 사용
체크
NULL
체크, 경로/확장자 오류 주의
마무리하며 💬
C 언어에서 파일을 다룬다는 건
데이터를 프로그램 밖으로 옮기고, 다시 불러오며,
현실 세계와 소통하는 관문을 여는 일입니다.
🎯 “파일은 프로그램의 눈과 귀다.
잘 열고, 잘 닫아야 좋은 프로그램이 된다!”
다음 시간에는 실제로 파일을 읽고 쓰는 방법과
문자열, 숫자 데이터를 어떻게 다루는지 더 깊이 있게 알아보겠습니다.
기대 많이 해주세요! 💻📄🔥