一、fseek
①函数原型:int fseek(FILE *stream, long offset, int whence);
②功能:修改流的偏移量
③参数:
stream:文件流指针
offset:偏移量
offset > 0 偏移量向后移
offset < 0 偏移量向前移
whence:
SEEK_SET:文件开头位置
SEEK_CUR:文件当前位置
SEEK_END:文件末尾
④返回值:成功返回0,失败返回1
eg:
fseek(fp, 5 ,SEEK_SET):把文件内部指针移动到距离文件开头5字节处
fseek(fp, 5 ,SEEK_CUR):把文件内部指针移动到离文件当前位置5字节处(指的是当前位置往后五字节处)
fseek(fp, 5 ,SEEK_END):把文件内部指针退回到离文件结尾5字节处
注意:有时可用0,1和2表示SEEK_SET,SEEK_CUR和SEEK_END
eg:
编写一个程序统计文件的大小(利用SEEK_END,获得文件在结束之前字符的大小)
#include <stdio.h>
int main(int argc, char const *argv[])
{
FILE *fp = NULL;
long len = 0;
fp = fopen("a.txt","r");
if( NULL == fp)
{
perror("fail to open");
return -1;
}
fseek(fp,0,SEEK_END); //定位到文件末尾的位置
len = ftell(fp); //获得流的偏移量,统计文件的大小
printf("len = %ld\n",len);
return 0;
}
运行结果:len =56和文件目录中a.txt大小一模一样

二、ftell
①函数原型:long ftell(FILE *stream);
②功能:获得流的偏移量
③参数:stream:文件流指针
定义一个long类型,例如fseek中计算文件大小的例题
三、rewind
①函数原型:void rewind(FILE *stream);
②功能:将流的偏移量重新定位到开头
③参数:stream:文件流指针
注意:rewind(stream) 等于fseek(stream, 0 ,SEEK_SET)
eg:
#include <stdio.h>
int main(int argc, char const *argv[])
{
FILE *fp = NULL;
long len = 0;
fp = fopen("a.txt", "w");
if (NULL == fp)
{
perror("fail to fopen");
return -1;
}
fseek(fp, 10, SEEK_SET);
fputc('a', fp);
len = ftell(fp);
printf("len = %ld\n", len);
fseek(fp, -5, SEEK_CUR);
fputc('b', fp);
len = ftell(fp);
printf("len = %ld\n", len);
rewind(fp); //重新定位到开头
fputc('c', fp);
len = ftell(fp);
printf("len = %ld\n", len);
fclose(fp);
return 0;
}
输出结果:
