首页 > 编程笔记

C语言fseek():移动文件内部位置指针

fseek() 是 C语言的一个标准库函数,定义在<stdio.h>头文件中。

fseek() 用于设置文件内部的位置指针,即改变文件中的读/写位置。fseek() 函数的原型如下:
int fseek(FILE *stream, long offset, int whence);

参数

  1. stream:文件指针,也就是被移动的文件。
  2. offset:偏移量,也就是要移动的字节数。之所以为 long 类型,是希望移动的范围更大,能处理的文件更大。offset 为正时,向后移动;offset 为负时,向前移动。
  3. whence:起始位置,也就是从何处开始计算偏移量,C语言规定的起始位置有三种,每个位置都用对应的常量来表示:
    • SEEK_SET:从文件开头,对应的常量值为 0;
    • SEEK_CUR:从文件的当前位置,对应的常量值为 1。
    • SEEK_END:从文件末尾,对应的常量值为 2。

例如,把位置指针移动到离文件开头 100 个字节处:
fseek(fp, 100, SEEK_SET);
fseek(fp, 100, 0);
以上两种写法是等价的。

返回值

成功时,fseek() 返回 0;失败时,fseek() 返回非零值,并设置全局错误指示器 errno。

【实例】以下是使用 C语言 fseek() 函数在文件中跳转到特定位置并读取数据的示例代码:
#include <stdio.h>

int main() {
  FILE *file = fopen("example.bin", "rb");

  if (file == NULL) {
    printf("Error opening file!\n");
    return 1;
  }

  // 跳转到文件的第10个字节处
  if (fseek(file, 9, SEEK_SET) != 0) {
    printf("Error seeking in file!\n");
    return 2;
  }

  // 读取一个字符
  char ch;
  fread(&ch, 1, 1, file);

  printf("Character read from file: %c\n", ch);

  fclose(file);
  return 0;
}
这个代码打开一个名为"example.bin"的文件并跳转到第 10 个字节,然后读取一个字符并打印它。如果文件打开或定位失败,则打印错误消息并返回非零退出代码。

请注意,这个示例假设您知道要跳转到的位置。在实际应用中,可能需要更复杂的逻辑来确定文件中的正确位置,特别是当您在处理结构化数据(如记录或对象)时。

推荐阅读