|
发表于 2020-5-24 23:00:45
|
显示全部楼层
如此,你的问题与你的标题不匹配。
你需要先设计一种协议(可以理解为存储格式,后面都称作“协议”),如何表示一条成绩记录。然后,考虑,基于你设计的协议,如何读写文件。
我有两种建议,
1. 基于 JSON 做文本序列化,每一条成绩记录,占用一行。
写入: 现将成绩结构体,进行 JSON 序列化。然后,使用 append 的方式,追加到文件最后。
读取: 以 "\n" (Linux / windows / macos 通用) 为分隔符,逐行读取文件,每一行,使用 json 反序列化,即为,一个成绩结构体。
优点: 人类可读,调试方便。
缺点: 大概率需要学习 JSON 是什么。
2. 长度 + 数据内容
每一条成绩的记录,有两部分组成:
第一部分: 固定长度的数值,表示,成绩数据实际大小。
第二部分: 成绩结构体的数据内容。
写入: 将结构体,序列化为二进制串(可以用地址转换为 char*, 或者其他什么协议),序列化之后,可以知道数据长度。先将这个长度写入到文件(无论大端还是小端都可以),然后将,序列化结果写入文件。
读取: 先读取固定长度(根据之前,写入文本时,数据长度字段的长度), 然后,读取这个长度的字节数,即为实际数据。
第三种: 按块读写,不推荐。
定义一个数据块大小,需要保证超过所有成绩记录的大小。
写入: 任意方式,序列化为二进制后,先写入实际数据,然后,按照块大小,补齐数据,或者 调用 truncate 改变文件大小。
读取: 每次固定读取一个块的数据。
以上,最推荐 方法1。如有疑问,自行 https://www.baidu.com || https://bing.com || https://google.com
|
|