1、方法
1.1 获取文件大小
ftell()函数
描述:C 库函数long int ftell(FILE *fp)返回给定流 stream 的当前文件位置。
参数:fp-- 这是指向 FILE 对象的指针,该 FILE 对象标识了流。
返回值:该函数返回位置标识符的当前值。如果发生错误,则返回 -1
声明:下面是 ftell() 函数的声明。
ftell() 函数用来获取文件内部指针(位置指针)距离文件开头的字节数,它的原型为:
long int ftell ( FILE * fp )
ftell函数使用场景1:通过fseek() 将文件内部指针定位到文件末尾,再使用 ftell() 返回内部指针距离文件开头的字节 数,这个返回值就等于文件的大小。
ftell函数使用场景2:随机方式存取文件时 , 使用 fseek 函数来回移动指针 , 不容易确定当前指针位置 , 通过调用ftell
函数确定指针位置 。
1.2 但是fseek移动到末尾后,还要让他再次指向开头,以便进行文件操作
fseek()函数
fseek
函数名: fseek
功 能: 重定位流上的文件指针
用 法: int fseek(FILE *stream, long offset, int fromwhere);
描 述: 函数设置文件指针stream的位置。如果执行成功,stream将指向以fromwhere为基准,偏移offset个字节的位置。如果执行失败(比如offset超过文件自身大小),则不改变stream指向的位置。
返回值: 成功,返回0,否则返回其他值。
int fseek( FILE *stream, long offset, int origin );
第一个参数stream为文件指针
第二个参数offset为偏移量,整数表示正向偏移,负数表示负向偏移
第三个参数origin设定从文件的哪里开始偏移,可能取值为:SEEK_CUR、 SEEK_END 或 SEEK_SET
SEEK_SET: 文件开头
SEEK_CUR: 当前位置
SEEK_END: 文件结尾
其中SEEK_SET,SEEK_CUR和SEEK_END和依次为0,1和2.
fseek(fp,100L,0);把fp指针移动到离文件开头100字节处;
fseek(fp,100L,1);把fp指针移动到离文件当前位置100字节处;
fseek(fp,100L,2);把fp指针退回到离文件结尾100字节处。
fseek(fp,0,0);把fp指针移动到离文件开头0字节处;
fseek(fp,0,1);把fp指针移动到离文件当前位置0字节处;
fseek(fp,0,2);把fp指针退回到离文件结尾0字节处。
2、实现
FILE *fp = fopen(filename, "rb");//fp 要以二进制方式打开,如果以文本方式打开,函数的返回值可能没有意义if (NULL == fp) {printf("openFileFailed\n");}/*获取文件字节大小size*/fseek(fp, 0, SEEK_END);//文件指针指向末尾int size = ftell(fp);fseek(fp, 0, SEEK_SET);//文件指针指向开头if(size > 0){printf("size: %d\n",size);}fclose(fp);