目录
1.fseek设置文件偏移量
函数原型:
cpp
/* 功能:设置文件位置指针的偏移量
参数:
stream:文件指针
offset:偏移量
可正可负也可为0, > 0 向后偏移; < 0 向前偏移
whence:相对位置
SEEK_SET 文件起始位置
SEEK_CUR 文件当前位置
SEEK_END 文件末尾位置(最后一个字符后面一个位置)
返回值:
成功:0
失败:‐1 */
int fseek(FILE *stream, long offset, int whence);
2.ftell获取当前偏移量
函数原型:
cpp
/* 功能:获取当前文件的偏移量
参数:
stream:文件指针
返回值:
获取当前文件的偏移量 */
long ftell(FILE *stream);
3.rewind使文件偏移量(为0)定位到开头
函数原型:
cpp
/* 功能:将文件位置定位到起始位置
参数:
stream:文件指针
返回值:无 */
void rewind(FILE *stream);
fseek(fp, 0, SEEK_SET);//等价于 rewind(fp); //定位到开头
4.程序验证
cpp
#include <stdio.h>
int main(int argc, char *argv[])
{
FILE *fp = NULL;
char buf[64] = "";
fp = fopen("./file.txt", "w+");
if(fp == NULL)
{
printf("fail to fopen\n");
return -1;
}
//通过fputs函数向文件写入数据
fputs("0123456789\n", fp);//11字节
fputs("ABCDEFGHIJ\n", fp);//11字节
fputs("9876543210", fp);//10字节,共写入32字节
//获取当前文件指针的读写位置
printf("fputs offset = %ld\n", ftell(fp));
//将当前文件的读写文件设置到文件的起始位置
rewind(fp);
//fseek(fp, 0, SEEK_SET);//等价于 rewind(fp); //定位到开头
//获取当前文件指针的读写位置
printf("rewind(fp) offset = %ld\n", ftell(fp));
//SEEK_CUR:为当前位置(上述程序偏移到文件开头)
//将当前文件的读写位置设置为SEEK_CUR+6
fseek(fp, 6, SEEK_CUR);
printf("SEEK_CUR+6 offset = %ld\n", ftell(fp));
//读取内容
while(fgets(buf, 64, fp) != NULL)
{
printf("SEEK_CUR+6 buf = %s\n", buf);
}
//将当前文件的读写位置设置为倒数第3个位置
fseek(fp, -3, SEEK_END);
printf("SEEK_CUR-3 offset = %ld\n", ftell(fp));
//读取内容
while(fgets(buf, 64, fp) != NULL)
{
printf("SEEK_END-3 buf = %s\n", buf);
}
//将当前文件的读写位置设置为开头第5个位置
fseek(fp, 5, SEEK_SET); //读取内容
printf("SEEK_SET+5 offset = %ld\n", ftell(fp));
while(fgets(buf, 64, fp) != NULL)
{
printf("SEEK_SET+5 buf = %s\n", buf);
}
fclose(fp);
return 0;
}
运行结果:

