C 语言文件操作 ( fseek 函数 )

Posted 韩曙亮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C 语言文件操作 ( fseek 函数 )相关的知识,希望对你有一定的参考价值。





一、fseek 函数



FILE 文件结构中 , 存在一个指针 , 每次调用文件的读写函数 , 该指针就会移动 ;

fgets / fputs , getc / putc , fscanf / fprintf , fread / fwrite 等函数 ;

默认情况下 , 指针是从前向后移动的 ;

该文件内部的指针指向的位置可以通过 fseek 函数进行改变 ;


fseek 函数原型如下 : 重新设置文件内部指针的位置 ;

#include <stdio.h>
int fseek(FILE *stream, long offset, int fromwhere);

设置的指针的位置是 起始位置 + 偏移量 ;

其中的 int fromwhere 参数就是 起始位置 , 有以下三种选择 :

  • 文件头 SEEK_SET 0
  • 当前位置 SEEK_CUR 1
  • 文件尾 SEEK_END 2

long offset 偏移量参数 , 可以为正数 , 也可以为负数 ;

如果执行成功 , 则返回 0 , 失败返回非 0 , 并设置 error 错误代码 ;





二、fseek 函数代码示例



fseek 函数代码示例 : 先写出 10 字节数据 , 然后正常读取前 2 字节 , 最后跳过 4 字节 再读取 2 字节 ;

#include <stdio.h>

int main()

    // 以写文本的方式向文件中写出数据
    FILE *p = fopen("D:/File/number.dat", "w");
    // 写出 10 个字符
    char array[10] = 1,2,3,4,5,6,7,8,9,10;
    // 将 10 个字符写出到文件中
    fwrite(array, 1, sizeof(array), p);
    // 关闭文件
    fclose(p);


    // 正常读取文件前 2 字节
    FILE *p1 = fopen("D:/File/number.dat", "r");
    // 读取数据缓冲区
    char array1[2];
    // 读取前 2 字节
    fread(array1, 1, sizeof(array1), p1);
    // 打印前 2 字节数据
    printf("%d , %d\\n", array1[0], array1[1]);


    // 跳过 4 字节读取文件 2 字节
    FILE *p2 = fopen("D:/File/number.dat", "r");
    // 读取数据缓冲区
    char array2[2];

    // 跳过 4 字节 , 此时当前位置是 0
    fseek(p2, 4, SEEK_CUR);

    // 读取 2 字节
    fread(array2, 1, sizeof(array2), p2);
    // 打印前 2 字节数据
    printf("%d , %d", array2[0], array2[1]);


    return 0;


执行结果 :

以上是关于C 语言文件操作 ( fseek 函数 )的主要内容,如果未能解决你的问题,请参考以下文章

C 语言文件操作 ( 使用 fseek 函数生成指定大小文件 | 偏移量 文件字节数 - 1 )

C语言 文件读写 fseek 函数

请问C语言对文件的读取都有哪些函数,都有啥功能?像fseek();fscanf();fread......啥的

C语言文件指针定位函数fseek与rewind有何区别?

C语言文件指针定位函数fseek与rewind有何区别?

C语言文件操作详解