当前位置: 首页 > news >正文

文件操作3

随机读写数据文件

一、随机读写原理

在我们写数据时,有一个光标不断的在随着新写入的数据往后移动;

而读数据时,也有一个看不见光标,随着已经读完的数据,往后移动

这里的文件读写位置标记——可以想象成图形界面里的光标,读写时自动移动

也类似于看电影,听音乐时的进度条

而随机读写就是随机跳跃移动光标,或是进度滚动条

二、随机读写函数fseek说明,fseek的简单应用

//把D盘目录下的1.txt文件(D:\\1.txt)的内容(前提有该文件且有数据),读2次并输出到屏幕
    

可以看到上图第一遍fread的返回值len1为15,不是100,因为fread的返回值是实际读取的数据数量

而第二个为0,并没有读进来,这是因为——

例如读下图中的一串数据,第一遍顺序读到末尾,光标显示在末尾

读完了第二次重新从光标的这个位置再去读,

此时光标已经在数据的最末尾了,那么再去读已经没有数据了

所以在第二次读len2之前,我们要将文件标记位置,重新移动到文件开头——fseek

fseek有3个参数

1.文件位置指针fr

2.字节距离这个参照点的位置

3.初始化的位置,也叫参照点,参照物

它提供了3个参照点,(参照点在哪,光标在哪)

第一个是文件标记位置,光标的当前位置;第二个是文件尾;第三个是文件头

之后通过第二个参数将光标往左或是往右偏移多少个字节

现在光标就能到达你想达到的位置,即随机函数

例如要到达文件开头,那就是偏移量为0,以文件开头为参照点

fseek(fr,0,SEEK_SET)

要是以第一遍读完后的文件尾,为当前位置,作参照点,

那么往左移为负数,往右移为正数

从尾回到头就是-len1

三、读取指定学生信息

//1打开2读3输出4跳过

//再磁盘文件上存有10个学生的数据,将第1,3,5,7,9个学生数据输入计算机,并在屏幕上显示出来//学生结构体
typedef struct Student
{char name[20];//姓名int num;//学号int age;//年龄char addr[100];//地址
} Student;//1打开2读3输出4跳过
int main()
{FILE* fr = fopen("1.txt", "rb");if (fr == NULL){printf("文件打开失败\n");return -1;}Student stu;//读到stu里面int len;for (int i = 0; i < 3; i++)//读3个学生的信息{len=fread(&stu, sizeof(Student), 1, fr);if (len < 1)//要信息了求读一次却没有读到1,说明文件已经没有{printf("文件结束了\n");break;}printf("%s %d %d %s\n", stu.name, stu.num, stu.age, stu.addr);//跳过偶数位置fseek(fr,sizeof(Student), SEEK_CUR);//跳过一个学生大小的字节数}fclose(fr);return 0;
}

http://www.lryc.cn/news/325234.html

相关文章:

  • 算法D57 | 动态规划17 | 647. 回文子串 516.最长回文子序列 动态规划总结篇
  • go的限流
  • 补充--广义表学习
  • 【笔记】KaiOS SPN显示逻辑
  • Visual Basic6.0零基础教学(4)—编码基础,数据类型与变量
  • VPCFormer:一个基于transformer的多视角指静脉识别模型和一个新基准
  • Android 图形渲染和显示系统关系
  • 3.C++:类与对象(下)
  • iOS开发之SwiftUI
  • 2024-简单点-pandas
  • 面试笔记——Redis(双写一致、持久化)
  • 【漏洞复现】科立讯通信指挥调度平台editemedia.php sql注入漏洞
  • css的active事件在手机端不生效的解决方法
  • 00. 认识 Java 语言与安装教程
  • 数据结构-栈-004
  • (第76天)XTTS 升级:11GR2 到 19C
  • 修改网站源码,给电子商城的商品添加图片时商品id为0的原因
  • ffmpeg开发异步AI推理Filter
  • python与excel第七节 拆分工作簿
  • JS08-DOM节点完整版
  • 【python】python3基础
  • 计算机三级网络技术 选择+大题234笔记
  • 智能合约 之 ERC-721
  • == 和 equals 的区别是什么?
  • VUE:内置组件<Teleport>妙用
  • ruoyi-nbcio-plus后端里mapstruct-plus和lombok的使用
  • 企业如何选择一个开源「好」项目?
  • c++算法学习笔记 (14) 并查集
  • import * as的使用
  • 微服务(基础篇-003-Nacos)