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 偏移的字符数。
  • origin:用作与 offset 相加的参考位置。它可以具有以下值:
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("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

另请阅读

你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战