C 언어에서는 fopen(), fseek(), ftell() 함수를 조합하면 파일의 크기를 손쉽게 구할 수 있습니다. 이 글에서는 파일 크기를 계산하는 C 프로그램의 알고리즘과 예제 코드, 실행 결과까지 단계별로 살펴보겠습니다.
알고리즘
시작
함수 findfileSize()
읽기 전용 모드("r")로 파일 포인터 fp를 연다.
만약 fp가 NULL이라면
"파일을 찾을 수 없습니다"를 출력하고 -1을 반환한다.
그렇지 않으면 파일 크기를 계산한다.
fseek()로 파일 포인터를 파일의 끝(SEEK_END)으로 이동시킨다.
ftell()의 반환값으로 정수형 변수 result를 초기화한다.
파일 포인터 fp를 닫는다.
result를 반환한다.
종료예제 코드
#include <stdio.h>
int findfileSize(char f_n[]) {
FILE* fp = fopen(f_n, "r"); // 읽기 모드로 파일 열기
if (fp == NULL) { // 파일 존재 여부 확인
printf("File Not Found!\n");
return -1;
}
fseek(fp, 0L, SEEK_END); // 파일 포인터를 파일 끝으로 이동
int res = ftell(fp); // 현재 위치(=파일 끝)까지의 바이트 수 계산
fclose(fp); // 파일 닫기
return res;
}
int main() {
char f_n[] = { "b.txt" }; // 크기를 구할 파일 이름 "b.txt"
int result = findfileSize(f_n);
if (result != -1)
printf("Size of the file is %ld bytes \n", result); // 파일 크기 출력
return 0;
}실행 결과
Size of the file is 2649 bytes
주요 함수 설명
fseek()
fseek(fp, 0L, SEEK_END)는 파일 포인터를 파일의 맨 끝으로 이동시키는 함수입니다. 세 번째 인자인 SEEK_END는 기준 위치를 파일 끝으로 지정하며, 두 번째 인자인 오프셋이 0이므로 파일의 마지막 바이트 다음 위치에 포인터가 놓이게 됩니다.
ftell()
ftell()은 파일 포인터의 현재 위치가 파일 시작점으로부터 몇 바이트 떨어져 있는지 반환합니다. 파일 끝으로 이동한 상태에서 호출하면 그 값이 곧 전체 파일 크기(바이트 단위)가 됩니다.
주의 사항
매우 큰 파일을 다루는 경우 ftell()의 반환값을 저장하는 변수를 long 타입으로 선언하는 것이 안전합니다. 또한 파일을 열 때 항상 반환값이 NULL인지 검사하여, 파일이 존재하지 않거나 열기에 실패한 경우를 처리해야 프로그램이 비정상적으로 동작하는 것을 막을 수 있습니다.