前面介绍的文件读写函数都是顺序读写,即读写文件只能从头开始,依次读写各个数据。但在实际开发中经常需要读写文件的中间部分,要解决这个问题,就得先移动文件内部的位置指针,再进行读写。这种读写方式称为随机读写,也就是说从文件的任意位置开始读写。

实现随机读写的关键是要按要求移动位置指针,这称为文件的定位。

文件定位函数rewind和fseek

移动文件内部位置指针的函数主要有两个,即 rewind() 和 fseek()。

rewind() 用来将位置指针移动到文件开头,前面已经多次使用过,它的原型为:

void rewind ( FILE *fp );

fseek() 用来将位置指针移动到任意位置,它的原型为:

int fseek ( FILE *fp, long offset, int origin );

参数说明:

1) fp 为文件指针,也就是被移动的文件。

2) offset 为偏移量,也就是要移动的字节数。之所以为 long 类型,是希望移动的范围更大,能处理的文件更大。offset 为正时,向后移动;offset 为负时,向前移动。

3) origin 为起始位置,也就是从何处开始计算偏移量。C语言规定的起始位置有三种,分别为文件开头、当前位置和文件末尾,每个位置都用对应的常量来表示:

起始点

常量名

常量值

文件开头

SEEK_SET

0

当前位置

SEEK_CUR

1

文件末尾

SEEK_END

2

例如,把位置指针移动到离文件开头100个字节处:

fseek(fp, 100, 0);

值得说明的是,fseek() 一般用于二进制文件,在文本文件中由于要进行转换,计算的位置有时会出错。

文件的随机读写

在移动位置指针之后,就可以用前面介绍的任何一种读写函数进行读写了。由于是二进制文件,因此常用 fread() 和 fwrite() 读写。

【示例】从键盘输入三组学生信息,保存到文件中,然后读取第二个学生的信息。

#include #define N 3 struct stu{ char name[10]; //姓名 int num; //学号 int age; //年龄 float score; //成绩 }boys[N], boy, *pboys; int main(){ FILE *fp; int i; pboys = boys; if( (fp=fopen("d:\demo.txt", "wb+")) == NULL ){ printf("Cannot open file, press any key to exit!n"); getch(); exit(1); } printf("Input data:n"); for(i=0; iname, &pboys->num, &pboys->age, &pboys->score); } fwrite(boys, sizeof(struct stu), N, fp); //写入三条学生信息 fseek(fp, sizeof(struct stu), SEEK_SET); //移动位置指针 fread(&boy, sizeof(struct stu), 1, fp); //读取一条学生信息 printf("%s %d %d %fn", boy.name, boy.num, boy.age, boy.score); fclose(fp); return 0; }

运行结果:

Input data:

Tom 2 15 90.5↙

Hua 1 14 99↙

Zhao 10 16 95.5↙

Hua  1  14 99.000000

c语言fseek128字节,C语言rewind和fseek函数的用法详解(随机读写文件)相关推荐

  1. C语言rewind函数返回值为空,C语言rewind和fseek函数的用法详解(随机读写文件)...

    前面介绍的文件读写函数都是顺序读写,即读写文件只能从头开始,依次读写各个数据.但在实际开发中经常需要读写文件的中间部分,要解决这个问题,就得先移动文件内部的位置指针,再进行读写.这种读写方式称为随机读 ...

  2. python rewind_C语言rewind和fseek函数的用法详解(随机读写文件)

    前面介绍的文件读写函数都是顺序读写,即读写文件只能从头开始,依次读写各个数据.但在实际开发中经常需要读写文件的中间部分,要解决这个问题,就得先移动文件内部的位置指针,再进行读写.这种读写方式称为随机读 ...

  3. 第十一章 文件操作_C语言fscanf和fprintf函数的用法详解(格式化读写文件)

    fscanf() 和 fprintf() 函数与前面使用的 scanf() 和 printf() 功能相似,都是格式化读写函数,两者的区别在于 fscanf() 和 fprintf() 的读写对象不是 ...

  4. php函数find的用法,c语言find函数的用法详解

    c语言find函数的用法详解 C语言之find()函数 find函数用于查找数组中的某一个指定元素的位置. 比如:有一个数组[0, 0, 5, 4, 4]: 问:元素5的在什么位置,find函数 返回 ...

  5. c语言memcopy_C语言中memcpy 函数的用法详解

    C语言中memcpy 函数的用法详解 memcpy(内存拷贝函数) c和c++使用的内存拷贝函数,memcpy函数的功能是从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址 ...

  6. 计算机科学类专升本复习之“C语言fopen函数的用法”详解(初稿)

    C语言fopen函数的用法,C语言打开文件详解 在C语言中,"操作文件" 之前 必须 先"打开文件"; 所谓"打开文件",就是让 " ...

  7. linux rewind函数,fseek(),ftell()和rewind()函数的用法详解

    转自:http://blog.csdn.net/lijun5635/article/details/14210181 功 能 重定位流( 数据流/文件)上的 文件内部位置 指针 注意:不是 定位文件指 ...

  8. C语言fscanf和fprintf函数的用法详解

    fscanf() 和 fprintf() 函数与前面使用的 scanf() 和 printf() 功能相似,都是格式化读写函数,两者的区别在于 fscanf() 和 fprintf() 的读写对象不是 ...

  9. x3用c语言函数表示,C语言中strtod()函数的用法详解

    函数原型: #include double strtod(const char *nptr, char **endptr); C语言及C++中的重要函数. 名称含义 strtod(将字符串转换成浮点数 ...

最新文章

  1. WPF程序中的XPSDocumentViewer
  2. 收藏的2个正则html标签剔除方法
  3. Linux-鸟菜-1-Linux简介
  4. 【控制】《多智能体系统的动力学分析与设计》徐光辉老师-第7章-不确定分数阶系统的多一致
  5. Atomic Integer 原理分析-getAndIncrement
  6. asp 强制转换浮点数值_C/C++中浮点数的编码存储
  7. c 结构体的简单封装1
  8. ESP8266使用历程
  9. jquery插件dataTables(dataTables在显示表格的时候,果然是个好东西,支持排序/搜索/分页/...)
  10. Android 沉浸式状态栏
  11. 作业要求 20181030-1 Alpha发布用户使用报告
  12. RF(接口自动化测试)
  13. Windows与Linux配置jco3
  14. STM32之字模软件的使用
  15. ImageNet数据集和ILSVRC2012介绍以及如何通过python使用
  16. 为什么别人的移动开发效率是你的2倍?丨课程推广
  17. 巴拉特比印度大分水岭
  18. Clock skew too great
  19. js实现图片连续滚动播放
  20. Received HTTP code 404 from proxy after CONNECT

热门文章

  1. C语言开定时器做呼吸灯程序,简单的基于51单片机定时器上呼吸灯程序
  2. jboss怎么连接Oracle数据库,如何在Jboss中配置数据源
  3. java图片转换为数据流_OpenCV 读取数据流图片
  4. native react 更新机制_React Native - 组件的生命周期详解(附:各阶段调用的方法)...
  5. rdd分片 spark_大数据面试题(Spark(一))
  6. html5 css3左侧多级菜单,modernizr.custom.js制作html5 CSS3多级层叠侧边菜单导航栏
  7. Oracle 实验5 视图与索引
  8. jquery 当页面图片加载之后_图片的懒加载和预加载
  9. java 打印不换行_Swift的print不换行打印的方法
  10. P1501 [国家集训队]Tree II