1、获取文件大小(长度)
实际开发中,有时候需要先获取文件大小再进行下一步操作。C 语言没有提供获取文件大小的函数,要想实现该功能,必须自己编写函数。
ftell()函数
ftell() 函数用来获取文件内部指针(位置指针)距离文件开头的字节数,它的原型为:
long int ftell ( FILE * fp );
注意:fp 要以二进制方式打开,如果以文本方式打开,函数的返回值可能没有意义。
先使用 fseek() 将文件内部指针定位到文件末尾,再使用 ftell() 返回内部指针距离文件开头的字节数,这个返回值就等于文件的大小。请看下面的代码:
1. long fsize(FILE *fp){
2. fseek(fp, 0, SEEK_END);
3. return ftell(fp);
4. }
这段代码并不健壮,它移动了文件内部指针,可能会导致接下来的文件操作错误。例如:
long size = fsize(fp);
fread(buffer, 1, 1, fp);
fread() 函数将永远读取不到内容。 所以,获取到文件大小后还需要恢复文件内部指针,请看下面的代码:
1. long fsize(FILE *fp){
2. long n;
3. fpos_t fpos; //当前位置
4. fgetpos(fp, &fpos); //获取当前位置
5. fseek(fp, 0, SEEK_END);
6. n = ftell(fp);
7. fsetpos(fp,&fpos); //恢复之前的位置
8. return n;
9. }
fpos_t 是在 stdio.h 中定义的结构体,用来保存文件的内部指针。fgetpos() 用来获取文件内部指针,fsetpos()用来设置文件内部指针。
完整的示例:
1. #include
2. #include
3. #include
4.
5. long fsize(FILE *fp);
6.
7. int main(){
8. long size = 0;
9. FILE *fp = NULL;
10. char filenam