요즘 바빠서 연습삼아서 간단한 코딩을 해봤다.


 이미 있는 파일 방식이라서 별 어려움도 없을 뿐더러. 딱히 제대로 사용이 될 것 같지만, 단일 파일의 길이를 알아봐야 되는 일이 있을 것이다.


 단일 파일의 길이를 알아야 되는 것은 파일을 읽었을때, 메모리 초과를 일어날 수 도 있고, 다양한 이유가 있을 것이다.


 파일의 길이를 알아 내는 것은 간단한 함수를 사용하면 된다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <stdio.h>
#include <stdlib.h>
 
long getFileSize(FILE*);
 
int main()
{
    FILE *filePoint = NULL;
    long fileSize = 0;
 
    if((filePoint=fopen("./test.txt","r"))==NULL)
    {
        printf("Error : File Not Files");
        return -1;
    }
 
    fileSize = getFileSize(filePoint);
 
    printf("File Size : %d", fileSize);
 
    return 0;
}
 
long getFileSize(FILE *filePoint)
{
    long fileSize = 0;
    fseek(filePoint, 0L, SEEK_END);
    fileSize = ftell(filePoint);
    fclose(filePoint);
 
    return fileSize;
}
 
cs


 fileSize라는 것으로 파일의 길이를 얻을 수 있다.


 여기서 사용하는 함수는 2가지인데, 첫번째는 fseek이다.


 fseek라는 것은 파일을 읽는 포인터의 위치를 개발자가 자기 원하는 형태로 바꾸는 것이다.


 단일 파일의 길이를 알아내는 방법은 간단하게 파일의 끝으로 파일 포인트를 보낸 다음에, 그 위치를 읽으면 된다.


 그래서 단일 파일에서 파일 끝으로 보내는 방법으로


 fseek(filePoint, 0L, SEEK_END); 을 사용한다.


 이 후에 ftell을 사용한다.


 ftell은 파일 포인터 위치의 값을 반환해주는 함수이다.


 fseek(filePoint, 0L, SEEK_END);을 한 후에라면, 파일 포인터의 위치의 값이 파일의 끝을 되게 된다. 그래서 ftell은 파일의 끝이 출력되어 파일의 최대 크기가 받아 지게 된다.


 하지만, 이건 잘 쓰일 일이 없다.


 이유는 sys/stat.h을 사용하면, 이상없이 사용이 가능하기 때문이다.


 stat 구조체에서 파일의 크기를 가지고 있기 때문에, 굳이 단일 파일을 열어서 관리할 필요가 없다는 것이다.


 하지만, 단일 파일의 크기를 이용해서 쓰거나 읽어 들이는 용도로는 쓸만 한 것 같다.

Posted by JunkMam
,