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 偏移的字符数。
- origin:用作与 offset 相加的参考位置。它可以具有以下值:
值 | 描述 |
---|---|
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("Name: ");
while((ch=fgetc(fp))!=' ')
putchar(ch);
putchar('\n');
printf("Age: ");
fseek(fp,10,SEEK_SET);
while((ch=fgetc(fp))!=' ')
putchar(ch);
putchar('\n');
printf("City: ");
fseek(fp,15,SEEK_SET);
while((ch=fgetc(fp))!=EOF)
putchar(ch);
putchar('\n');
fclose(fp);
return 0;
}
运行程序后,输出将是
Name: Erica Age: 25 City: Berlin
另请阅读