본문 바로가기
Language/C언어

C024_파일 크기 구하기

by OdOp 관리자 2023. 9. 26.
SMALL

시작하기에 앞서서 만약에 파일 읽기 쓰기에 대해서 아직은 헷갈려하시는 분들은 아래의 포스팅을 읽으시면 이번 포스팅이 더 쉽게 이해하실 수 있으실 거라고 생각됩니다. 

https://hig0617.tistory.com/27

 

파일 크기 구하기

fseek함수를 사용해야 합니다. fseek함수는 파일에서의 현재 위치를 저희가 원하는 대로 옮길 수 있습니다.  fseek함수를 간단하게 설명하자면 아래와 같습니다. 

fseek(파일 포인터, 이동할 크기, 기준점)

우선 위치를 알고 싶은 파일 포인터를 선정해서 넣습니다. 

둘째로 기준점에서 얼마나 이동하고 싶은지 정해서 넣습니다. 

근데, 기준점은 어떤 것이 있을까요??

파일의 처음 위치, 현재 위치, 그리고 끝 위치 이렇게 3가지 정도로 나눌 수 있습니다. 

SEEK_SET : 파일의 처음 위치
SEEK_CUR : 현재 위치
SEEK_END : 파일의 끝 위치

이렇게 나타낼 수 있습니다. 

자 이제 파일 크기를 한 번 구해 보겠습니다. 

#include <stdio.h>

int main()
{
    int size;
    char *s1 = "Hello 100!";

    FILE* fp = fopen("hello.txt", "w");
    fprintf(fp, "%s", s1);
    fclose(fp);
    FILE* fp1 = fopen("hello.txt", "r");  //hello.txt 파일을 읽기 모드(r)로 열기, 파일 포인터 반환 
    fseek(fp1, 0, SEEK_END);  //파일 포인터를 끝으로 이동시킴 
    size = ftell(fp1);  //파일 포인터의 현재 위치를 얻음, 파일의 크기를 알 수 있음
    printf("%d\n", size);
    fclose(fp);
    return 0;
}

우선 'hello.txt'라는 파일을 하나 만들어서 'Hello 100!'를 작성했습니다. 

그 후 읽기 모드로 접근하여 fseek을 사용했습니다. 

저희는 마지막 지점을 찾으면 되겠죠.

fseek(fp1, 0, SEEK_END);

fp1파일 포인터에서 끝부분에서 이동하면 안 되는 이동할 크기는 0바이트입니다. 

이제 파일 포인터의 위치를 알아야겠죠.

ftell(fp1);

ftell함수는 괄호 안에 입력받은 포인터의 현재 위치를 반환해 줍니다. 실패하면 -1을 반환합니다. 

이렇게 하면 파일의 크기를 구할 수 있습니다. 

LIST

'Language > C언어' 카테고리의 다른 글

C026_write함수 문자열 출력하기  (0) 2023.10.13
C025_putchar함수 만들기  (0) 2023.10.12
C023_파일 쓰고 읽기 fread, fwrite  (0) 2023.09.25
C022_파일 쓰고 읽기 fput, fgets  (0) 2023.09.24
C021_파일 쓰고 읽기  (0) 2023.09.23