前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >文件的随机读写

文件的随机读写

作者头像
pigeon
发布2022-04-11 19:29:37
5430
发布2022-04-11 19:29:37
举报
文章被收录于专栏:电子荣耀

文件的随机读写

文件的随机读写

定义:读写操作时,不按照数据在文件中先后次序依次读写,而是可以对文件中任意位置的数据进行访问,在读写文件中特定数据时效率较高。

10.4.1 文件位置标记

为对文件读写的数据进行控制,系统为每个文件设置一个文件读写位置标记(简称文件位置标记),指示“要读写的下一个数据的位置”。

文件位置标记的定位

文件位置标记的定位

(1)void rewind(FILE *fp)

把fp指向文件的文件位置标记定位到文件的开头位置,并清除文件结束标记和错误标记。

(2) int fseek(FILE *fp, long offset, int base)

把fp指向文件位置标记移动到以base给出的位置为基准,以offset给出的数值为偏移量的位置。定位成功,函数返回定位的位置,否则文件读写位置不变,返回非0值。

几个fseek函数应用的例子:

fseek(fp, 10L, CUR_SET); //文件头开始,向文件尾方向偏移10个字节

fseek(fp, 10L, CUR_CUR); //当前位置开始,向文件尾方向偏移10个字节

fseek(fp, -10L, CUR_END); //文件尾开始,向文件头方向偏移10个字节

(3) long ftell(FILE *fp):返回fp所指向文件的文件位置标记的值。

(4) int feof(FILE *fp):检查文件是否结束。结束返回非0值,否则返回0。

例:在二进制文件integer.dat中存放有若干个整数,计算文件中奇数位置(第1、3、5、…)上的整数的和。

参考代码:

代码语言:javascript
复制
#include <stdio.h>
 #include <stdlib.h>
 int main()
 {
     int i=, sum=, n;
     FILE *fp;
     if((fp=fopen("integer.dat", "rb")) == NULL)
     {
         printf("文件打开失败!\n");
         exit();
     }
     while(fread(&n, sizeof(int), , fp)>)
     {
         printf("i=%d, n=%d\n", i, n);
         sum = sum+n;
         fseek(fp, sizeof(int), SEEK_CUR);     //跳过下一个整数
     }
     fclose(fp);
     printf("sum=%d\n", sum);
     return ;
 }
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-01-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 电子荣耀 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档