在C/C++中使用fseek()函数

时间:2020-02-23 14:29:57  来源:igfitidea点击:

在本文中,我们将介绍如何在C/C++中使用fseek()函数。

fseek()是遍历文件的非常有用的函数。
通过移动文件指针,我们可以"搜索"到不同的位置。

这使我们能够控制其中可以读写文件。

让我们使用一些说明性示例来看看如何使用此功能!

C/C++中fseek()的基本语法

fseek()函数将根据我们提供的选项将文件指针移至文件。

该功能存在于<stdio.h>头文件中。

该函数的原型如下:

#include <stdio.h>

int fseek(FILE* fp, int offset, int position);

通常,如果要移动指针,则需要指定指针将从其开始移动的起始位置("偏移")!

有三种选择"位置"的选项,您可以其中使用"偏移"来移动指针。

其中" position"可以采用以下宏值:

  • SEEK_SET->我们将初始位置放置在文件的开头,然后从那里开始移动。

  • SEEK_CUR->初始位置在现有文件指针的当前位置。

  • SEEK_END->我们将初始位置放在文件末尾。
    如果将指针从该位置移开,将到达" EOF"。

如果函数成功执行,它将返回0。
否则,它将返回非零值。

注意:如果使用的是" SEEK_END",则"偏移"位置是向后测量的,因此我们将从文件末尾开始!

例如,如果您尝试寻找一个不存在的职位,它将失败!

现在我们已经介绍了基本语法,现在让我们使用" fseek()"来看一些示例。

对于整个演示,我们将使用具有以下内容的sample.txt文件:

Hello from theitroad
This is a sample file
This is the last line.

在C/C++中使用fseek()–一些示例

在第一个示例中,我们将使用fseek()fread()来从现有文件中进行读取。

我们将指针移到文件的开头,然后将偏移量放置在5个位置上。
偏移= 5

#include <stdio.h>

int main() {
	//Open the file
	FILE* fp = fopen("sample.txt", "r");

	//Move the pointer to the start of the file
	//And set offset as 5
	fseek(fp, 5, SEEK_SET);

	char buffer[512];

	//Read from the file using fread()
	fread(buffer, sizeof(buffer), sizeof(char), fp);

	printf("File contains: %s\n", buffer);

	//Close the file
	fclose(fp);
	return 0;
}

输出

File contains:  from theitroad
This is a sample file
This is the last line.

如您所见,它仅从头5个字符之后的位置5开始读取。
所以我们看不到"你好"

现在,我们将使用" SEEK_END"将指针移到末尾。
最后,使用fwrite(),将附加到同一文件!

#include <stdio.h>

int main() {
  //Open the file for writing
  FILE* fp = fopen("sample.txt", "a");

  //Move the pointer to the end of the file
  fseek(fp, 0, SEEK_END);

  char text[] = "This is some appended text";

  //Write to the file using fwrite()
  fwrite(text, sizeof(buffer), sizeof(char), fp);

  printf("Appended:%s to the file!\n", text);

  //Close the file
  fclose(fp);

  return 0;
}

输出

Hello from theitroad
This is a sample file
This is the last line.
This is some appended text