130 C语言获取文件大小(长度)
2017-06-08 23:57
447 查看
C学习网:链接->C学习网
C训练网:链接->C训练网
实际开发中,有时候需要先获取文件大小再进行下一步操作。C语言没有提供获取文件大小的函数,要想实现该功能,必须自己编写函数。
ftell() 函数用来获取文件内部指针(位置指针)距离文件开头的字节数,它的原型为:
注意:fp 要以二进制方式打开,如果以文本方式打开,函数的返回值可能没有意义。
先使用 fseek() 将文件内部指针定位到文件末尾,再使用 ftell() 返回内部指针距离文件开头的字节数,这个返回值就等于文件的大小。请看下面的代码:
long fsize(FILE *fp){
fseek(fp, 0, SEEK_END);
return ftell(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<stdio.h>
#include<stdlib.h>
#include<conio.h>
long fsize(FILE *fp);
int main(){
long size = 0;
FILE *fp = NULL;
char filename[30] = "D:\\1.mp4";
if( (fp = fopen(filename, "rb")) == NULL ){ //以二进制方式打开文件
printf("Failed to open %s...", filename);
getch();
exit(EXIT_SUCCESS);
}
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;
}
C训练网:链接->C训练网
实际开发中,有时候需要先获取文件大小再进行下一步操作。C语言没有提供获取文件大小的函数,要想实现该功能,必须自己编写函数。
ftell()函数
ftell() 函数用来获取文件内部指针(位置指针)距离文件开头的字节数,它的原型为:long int ftell ( FILE * fp );
注意:fp 要以二进制方式打开,如果以文本方式打开,函数的返回值可能没有意义。
先使用 fseek() 将文件内部指针定位到文件末尾,再使用 ftell() 返回内部指针距离文件开头的字节数,这个返回值就等于文件的大小。请看下面的代码:
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<stdio.h>
#include<stdlib.h>
#include<conio.h>
long fsize(FILE *fp);
int main(){
long size = 0;
FILE *fp = NULL;
char filename[30] = "D:\\1.mp4";
if( (fp = fopen(filename, "rb")) == NULL ){ //以二进制方式打开文件
printf("Failed to open %s...", filename);
getch();
exit(EXIT_SUCCESS);
}
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;
}
相关文章推荐
- c语言获取文件长度
- 读取文件大小 获取文件长度
- C语言中获取文件大小的函数
- C语言获取文件大小相关操作
- Linux系统遍历文件夹 获取文件大小的操作(C语言实现)
- 如何用C语言获取文件的大小
- 页面中在上传之前获取上传文件的路径(例子:获取上传图片的路径,获得上传图片的大小:长度和宽度)
- c语言中获取文件长度的一种方法
- 获取文件大小(C语言)
- C语言获取文件大小
- C语言获取文件长度及全部内容
- 用C语言获取任意文件的长度(可能大于2GB)
- 页面中在上传之前获取上传文件的路径(例子:获取上传图片的路径,获得上传图片的大小:长度和宽度)
- C语言获取文件大小
- C语言快速获取文件的大小
- C语言中获取文件大小的方法
- C语言获取文件长度
- 用C语言获取任意文件的长度(可能大于2GB)
- C语言获取文件大小
- 用C语言获取文件的大小示例分享