看流星社区

 找回密码
 注册账号
查看: 1755|回复: 0

二进制文件随机存取的两种方法

[复制链接]

该用户从未签到

发表于 2013-5-16 08:51:48 | 显示全部楼层 |阅读模式
以下是本人使用C++实现二进制文件随机存取的两种常用方法,写出来,让您见笑,还望方家点拨。

第一种方法:根据记录编号,对每一条记录固定位置存取,实现随机存取

设计思想:

每一条记录的记录编号,决定该记录的存取位置。如:第一条记录记录编号是1,放在位置1;第二条记录的记录编号是2,放在位置2;………,依次类推。

要修改第二条记录,首先根据记录编号计算出该记录的存储位置,然后将内置指针直接调至此处,进行修改。

新添记录,可根据它的记录编号存储到文件的相应位置。

这种随机存取方法通俗易懂,简便易行。适用于记录条数不多的文件,要求记录编号尽可能连续。其缺点是存储记录不连续,占用空间大。

工程Random1演示了这种方法,建议您先演示工程,在对该工程有一个了解的基础上再阅读代码。代码中已经对与本文相关的语句作了详细说明,您可以非常方便地读懂。

第二种方法:利用链表指针,实现随机操作

设计思想:

对文件进行操作前,先把文件读入内存,做成链表以方便操作,操作完毕后存盘保存。

这种方法由于使用链表指针,对记录的增加、删减都非常方便。

这种方法不需要记录编号,记录存储连续,占用空间小。其缺点是对程序设计人员要求较高,必须对链表指针有一定了解。

工程Random2演示了这种方法,同样建议您先演示工程,在对该工程有一个了解的基础上再阅读代码。

下面对该工程作几点简要说明:

工程新建了一个类CFileRandom实现文件的随机操作。成员函数add用于增加一个记录;change可以修改一个记录;DescentSort实现降序排列;Display显示所有记录;Read把所有记录调入内存;Remove用于删除一条记录;Save用于将内存中的整个链表存盘保存。

CRandom2Dlg使用CFileRandom类实现具体操作。同样,与本文相关的源码都作了详细说明。

再次感谢您阅读本文,欢迎您批评指正。
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-4-29 14:10

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

快速回复 返回顶部 返回列表