文章目录
一、fseek 函数
FILE 文件结构中 , 存在一个指针 , 每次调用文件的读写函数 , 该指针就会移动 ;
如 fgets / fputs , getc / putc , fscanf / fprintf , fread / fwrite 等函数 ;
默认情况下 , 指针是从前向后移动的 ;
该文件内部的指针指向的位置可以通过 fseek 函数进行改变 ;
fseek 函数原型如下 : 重新设置文件内部指针的位置 ;
#include
int fseek(FILE *stream, long offset, int fromwhere);
设置的指针的位置是 起始位置 + 偏移量 ;
其中的 int fromwhere 参数就是 起始位置 , 有以下三种选择 :
- 文件头
SEEK_SET0 - 当前位置
SEEK_CUR1 - 文件尾
SEEK_END2
long offset 偏移量参数 , 可以为正数 , 也可以为负数 ;
如果执行成功 , 则返回 0 , 失败返回非 0 , 并设置 error 错误代码 ;
二、fseek 函数代码示例
fseek 函数代码示例 : 先写出 10 字节数据 , 然后正常读取前 2 字节 , 最后跳过 4 字节 再读取 2 字节 ;
#include
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; }
执行结果 :

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/221975.html原文链接:https://javaforall.net
