C에서 파일 크기를 얻는 방법
접근법 1
파일 크기를 알아야 할 때 가장 먼저 떠오르는 접근 방식은 파일을 열고 커서를 파일 끝까지 찾은 다음 커서의 위치를 가져오는 것입니다. 파일 크기에 불과합니다.
이것을 어떻게 달성할 수 있는지 이해합시다.
fopen
를 사용하여 파일을 엽니다. 첫 번째 인수는 파일 경로이고 두 번째 인수는 mode
이며 file descriptor
를 반환합니다. 파일을 수정할 필요가 없으므로 "r"
를 사용하여 읽기 모드로 엽니다. fseek
를 사용하여 커서를 파일의 끝으로 이동합니다.fd
열린 파일의 파일 설명자입니다. offset
세 번째 인수 위치에서 오프셋할 양입니다. whence
커서가 이동을 고려해야 하는 위치.파일 시작에 상대적인
SEEK_SET
, 현재 위치에 상대적인 SEEK_CUR
, 파일의 끝에 상대적인 SEEK_END
세 가지 옵션이 있습니다. 파일의 끝으로 이동해야 하므로 끝에서 0을 이동해야 하므로 파일의 끝을 기준으로 오프셋을 0으로 설정합니다.
fseek
실패하면 -1
를 반환합니다.ftell
를 사용하여 fd
를 인수로 사용하고 파일 크기인 현재 위치를 반환하는 현재 위치를 가져옵니다. 실패하면 -1
를 반환합니다. NOTE: If the cursor move by 1 unit we consider it as 1 byte because the size of
char
is 1 byte andfopen
reads the file character by character only.
암호
#include <stdio.h>
// function get file size
long get_file_size(char *);
int main() {
char *filename = "a.out";
printf(
"Size of file `%s` is %ld\n",
filename,
get_file_size(filename)
);
return 0;
}
long get_file_size(char *filename) {
FILE *fp = fopen(filename, "r");
if (fp==NULL)
return -1;
if (fseek(fp, 0, SEEK_END) < 0) {
fclose(fp);
return -1;
}
long size = ftell(fp);
// release the resources when not required
fclose(fp);
return size;
}
산출
Size of file `a.out` is 51880 bytes
접근법 2
이 접근 방식에서는
stat
API를 사용하여 파일 크기도 포함하는 파일 정보를 가져옵니다.이를 위해 파일 경로를 첫 번째 인수로 사용하고 stat 구조체 변수에 대한 포인터를 두 번째 인수로 사용하고 실패 시
stat
를 반환하는 -1
함수를 호출합니다.파일 크기를 얻으려면 간단히
st_size
속성을 사용할 수 있습니다.암호
#include <sys/stat.h> // stat
// inherit the above base code here
long get_file_size(char *filename) {
struct stat file_status;
if (stat(filename, &file_status) < 0) {
return -1;
}
return file_status.st_size;
}
산출
Size of file `a.out` is 51880 bytes
이를 사용하여 권한, 생성 시간, 사용자 ID, 그룹 ID 등과 같은 파일에 대한 다른 정보를 얻을 수 있습니다. 또한 요구 사항에 따라 사용할 수 있는 다른 함수가 정의되어 있습니다. 자세한 내용은 man page을 확인하십시오.
어느 것을 사용해야 합니까?
두 번째 방법은 다음과 같은 이유로 더 권장됩니다.
하지만 이 코드는 이식성이 없습니다. 다른 API는 파일 정보를 얻기 위해 Windows와 같은 OS에서 개발됩니다.
첫 번째 접근 방식 코드는 이식 가능합니다. 동일한 코드가 문제없이 정상적으로 작동하기 때문입니다.
따라서 결론적으로 우리가 어떤 전략을 취해야 하는지는 전적으로 우리의 요구 사항에 달려 있습니다.
This article is highly inspired by the content provided by Jacob Sorber on his .
❤️이 글을 읽어주셔서 정말 감사합니다. 저는 새로운 것을 배우는 열정적인 공대생이므로 실수를 발견하거나 제안할 사항이 있으면 댓글로 알려주세요.
또한 이 게시물이 어떤 식으로든 도움이 된다면 공유하고 엄지손가락을 치켜세우는 것을 고려하십시오.
Reference
이 문제에 관하여(C에서 파일 크기를 얻는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/namantam1/ways-to-get-the-file-size-in-c-2mag텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)