C语言获取文件大小(长度)

C语言获取文件大小(长度)

实际开发中,有时候需要先获取文件大小再进行下一步操作。C语言没有提供获取文件大小的函数,要想实现该功能,必须自己编写函数。

ftell()函数

ftell() 函数用来获取文件内部指针(位置指针)距离文件开头的字节数,它的原型为:

long int ftell ( FILE * fp );

先使用 fseek() 将文件内部指针定位到文件末尾,

再使用 ftell() 返回内部指针距离文件开头的字节数,这个返回值就等于文件的大小。

注意:fp 要以二进制方式打开,如果以文本方式打开,函数的返回值可能没有意义。

请看下面的代码:

long fsize(FILE *fp){

fseek(fp, 0, SEEK_END);

return ftell(fp);

}

这段代码并不健壮,它移动了文件内部指针,可能会导致接下来的文件操作错误。例如:

long size = fsize(fp);

fread(buffer, 1, 1, fp);

fread() 函数将永远读取不到内容。

所以,获取到文件大小后还需要恢复文件内部指针,请看下面的代码:

long fsize(FILE *fp){

long n;

fpos_t fpos; //当前位置

fgetpos(fp, &fpos); //获取当前位置

fseek(fp, 0, SEEK_END);

n = ftell(fp);

fsetpos(fp,&fpos); //恢复之前的位置

return n;

}

fpos_t 是在 stdio.h 中定义的结构体,用来保存文件的内部指针。

fgetpos() 用来获取文件内部指针,

fsetpos() 用来设置文件内部指针。

完整的示例:

#include

#include

long fsize(FILE *fp);

int main(){

long size = 0;

FILE *fp = NULL;

char filename[30] = "demo.txt";

if( (fp = fopen(filename, "rb")) == NULL ){ //以二进制方式打开文件

printf("Failed to open %s...", filename);

exit(0);

}

printf("%ld\n", fsize(fp));

return 0;

}

long fsize(FILE *fp){

long n;

fpos_t fpos; //当前位置

fgetpos(fp, &fpos); //获取当前位置

fseek(fp, 0, SEEK_END);

n = ftell(fp);

fsetpos(fp,&fpos); //恢复之前的位置

return n;

}

相关推荐

字节跳动签约合同
bet878365

字节跳动签约合同

📅 07-01 👁️ 2457
小扬篇·用户体验报告——【货车帮·司机】
在哪个应用商店能下载365

小扬篇·用户体验报告——【货车帮·司机】

📅 06-30 👁️ 3272
linux 两个炸服务器的恐怖指令(避坑)
在哪个应用商店能下载365

linux 两个炸服务器的恐怖指令(避坑)

📅 06-30 👁️ 1953