介绍两种获取文件大小的方法:
1、使用ftell函数
函数原型:long ftell(FILE *stream);注意:因为ftell返回long型,根据long型的取值范围(-2147483648~2147483647),故对大于2.1G的文件进行操作时出错。
此种以打开文件的方法取得文件的大小,不适合大文件,并且可能会出现访问冲突(比如正在下载的文件),效率也比较低。
unsigned long get_file_size(const char *path)
{
unsigned long filesize = 0;
FILE *fp = NULL;
fp = fopen(path, "r");
if (NULL == fp)
{
printf("Error: open file failed...\n");
return filesize;
}
fseek(fp, 0L, SEEK_END);
filesize = ftell(fp);
fclose(fp);
return filesize;
}
2、使用 stat函数
stat函数讲解
表头文件: #include <sys/stat.h>
#include <unistd.h>
定义函数: int stat(const char *file_name, struct stat *buf);
函数说明: 通过文件名filename获取文件信息,并保存在buf所指的结构体stat中
返回值: 执行成功则返回0,失败返回-1,错误代码存于errno
此种使用读取文件属性的方法得到文件的大小,效率较高,也较稳定
#include <sys/stat.h>
unsigned long get_file_size(const char *path)
{
unsigned long filesize = 0;
struct stat statbuff;
if (stat(path, &statbuff) < 0)
{
return filesize;
}
else
{
filesize = statbuff.st_size;
}
return filesize;
}