C++ fseek() 函数
fseek()
函数定义在 <cstdio>
头文件中。
fseek() 函数原型
int fseek(FILE* stream, long offset, int origin);
如果文件以二进制模式打开,文件指针的新位置将精确地从起点偏移 offset 字节。
如果文件以文本模式打开,offset 支持的值有:
- 零:它与任何值的 origin 兼容,即 SEEK_SET、SEEK_CUR 和 SEEK_END。
- 通过调用 ftell(stream) 返回的值:它仅与 SEEK_SET 的 origin 兼容。
如果流是宽字符定向的,文本和二进制流的限制都适用,即允许使用 SEEK_SET 的 ftell 结果和从 SEEK_SET 和 SEEK_CUR 允许的零偏移,但不允许从 SEEK_END。
fseek
函数还撤销 ungetc 的效果,并清除文件结束状态(如果适用)。
如果发生读写错误,将设置 ferror 并且文件位置不受影响。
fseek() 参数
stream
:要修改的文件流。offset
:从起点偏移的字符数。origin
:用作参考的位置以添加到偏移量。它可以有以下值:
fseek() 的 origin 值
值 | 描述 |
---|---|
SEEK_SET | 文件开始处 |
SEEK_CUR | 文件指针的当前位置 |
SEEK_END | 文件末尾 |
fseek() 返回值
- 成功时
fseek()
函数返回零,否则返回非零值。
示例:fseek() 函数如何工作?
#include <cstdio>
int main()
{
FILE* fp = fopen("example.txt","w+");
char ch;
fputs("Erica 25 Berlin", fp);
rewind(fp);
printf("姓名:");
while((ch=fgetc(fp))!=' ')
putchar(ch);
putchar('\n');
printf("年龄:");
fseek(fp,10,SEEK_SET);
while((ch=fgetc(fp))!=' ')
putchar(ch);
putchar('\n');
printf("城市:");
fseek(fp,15,SEEK_SET);
while((ch=fgetc(fp))!=EOF)
putchar(ch);
putchar('\n');
fclose(fp);
return 0;
}
当你运行程序时,输出将会是:
姓名:Erica
年龄:25
城市:Berlin