当前位置:网站首页>通讯录改进即“保存”
通讯录改进即“保存”
2022-08-09 05:13:00 【潜水少年请求出战】
文件:
我们在想既然是通讯录就应该把信息记录下来,只有我们自己选择删除数据的时候,数据才不复存在。
这就涉及到了数据持久化的问题,我们一般数据持久化的方法有,把数据存放在磁盘文件、存放到数据
库等方式
使用文件我们可以将数据直接存放在电脑的硬盘上,做到了数据的持久化。
文件的打开和关闭:
缓冲文件系统中,关键的概念是“文件类型指针”,简称“文件指针”。
每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息(如文件的名
字,文件状态及文件当前的位置等)。这些信息是保存在一个结构体变量中的。该结构体类型是有系统
声明的,取名FILE
当然我们使用的时候,只知道他是个文件指针就行了。
保存方法:
首先我们知道通讯录退出的时候保存一下,所以我们可以这样做。
//保存通讯录。 void save_contact(contact* pc) { assert(pc); //打开文件 FILE* pf = fopen("contact.dat", "wb"); if (pf == NULL) { perror("Save_contact::fopen"); return; } //写文件 int i = 0; for (i = 0; i < pc->sz; i++) { fwrite(pc->pos + i, sizeof(peoInfo), 1, pf); } //关闭文件 fclose(pf); pf = NULL; }
我们保存了,那么我们就需要读一下。那么在哪里读那,当然在初始化的时候。
//文件形式。 void LoadContact(contact* pc) { //打开文件。 FILE* pf = fopen("contact.dat", "rb"); if (pf == NULL) { perror("LoadContact::fopen"); return; } //读文件。 peoInfo tmp = { 0 }; while (fread(&tmp, sizeof(peoInfo), 1, pf)) { CheckCapacity(pc); pc->pos[pc->sz++] = tmp; } //关闭文件。 fclose(pf); pf = NULL; } void Init_cotact(contact* pc) { assert(pc); pc->sz = 0; pc->capacity = NUME_CAP; pc->pos = (peoInfo*)malloc(pc->capacity * sizeof(peoInfo));//堆上开辟空间。 if (pc->pos == NULL) { perror("Init_cotact::malloc"); return; } memset(pc->pos, 0, pc->capacity * sizeof(peoInfo));//初始化为0。 //加载文件信息到通讯录里面。 LoadContact(pc); }
注意(知识点):
文件使用方式 含义 如果指定文件不存在
“rb”(只读) 为了输入数据,打开一个二进制文件 出错 “wb”(只写) 为了输出数据,打开一个二进制文件 建立一个新的文件
边栏推荐
- IDEA05:线程管理
- Why do enterprises need business intelligence BI in the digital age
- 【luogu U142356】Suffix of the Brave (SA) (Chairman Tree) (2 points)
- 【MLT】MLT多媒体框架生产消费架构解析(二)
- 电气规则
- 【ManageEngine】网络性能监控工具
- 使用Redis zset做消息队列
- [Developers must see] [push kit] Collection of typical problems of push service service 2
- 图解LeetCode——761. 特殊的二进制序列(难度:困难)
- 74HC595 的使用
猜你喜欢
随机推荐
匿名共享内存 ashmem
查询的结果封装到实体类中并使用集合储存
电气规则
保存Simulink仿真模型为图片或者PDF的方法
Software testing method is introduced in detail
剑指Offer-双指针类型题目总结
详谈归并排序时间复杂度过程推导----软考
【MLT】MLT多媒体框架生产消费架构解析(二)
微服务架构基础 微服务相关概念及基础知识 贺兰的微博
Docker部署MySQL
想要精准营销,从学习搭建一套对的标签体系开始丨DTVision分析洞察篇
[Developers must see] [push kit] Collection of typical problems of push service service 2
数组 冒泡排序
STM32的Cube学习笔记(ADC)
图解LeetCode——761. 特殊的二进制序列(难度:困难)
力扣202-快乐数——哈希集合
P8462 「REOI-1」奶油蛋糕
IDEA05:线程管理
[UNR #6 A] Noodle-based road (shortest path)
通讯录(文件版)(C语言)(VS)