分类: C/C++
2008-03-18 13:33:33
以下是本人使用C++实现二进制文件随机存取的两种常用方法,写出来,让您见笑,还望方家点拨。
第一种方法:根据记录编号,对每一条记录固定位置存取,实现随机存取
设计思想:
每一条记录的记录编号,决定该记录的存取位置。如:第一条记录记录编号是1,放在位置1;第二条记录的记录编号是2,放在位置2;………,依次类推。
要修改第二条记录,首先根据记录编号计算出该记录的存储位置,然后将内置指针直接调至此处,进行修改。
新添记录,可根据它的记录编号存储到文件的相应位置。
这种随机存取方法通俗易懂,简便易行。适用于记录条数不多的文件,要求记录编号尽可能连续。其缺点是存储记录不连续,占用空间大。
工程Random1演示了这种方法,建议您先演示工程,在对该工程有一个了解的基础上再阅读代码。代码中已经对与本文相关的语句作了详细说明,您可以非常方便地读懂。
第二种方法:利用链表指针,实现随机操作
设计思想:
对文件进行操作前,先把文件读入内存,做成链表以方便操作,操作完毕后存盘保存。
这种方法由于使用链表指针,对记录的增加、删减都非常方便。
这种方法不需要记录编号,记录存储连续,占用空间小。其缺点是对程序设计人员要求较高,必须对链表指针有一定了解。
工程Random2演示了这种方法,同样建议您先演示工程,在对该工程有一个了解的基础上再阅读代码。
下面对该工程作几点简要说明:
工程新建了一个类CFileRandom实现文件的随机操作。成员函数add用于增加一个记录;change可以修改一个记录;DescentSort实现降序排列;Display显示所有记录;Read把所有记录调入内存;Remove用于删除一条记录;Save用于将内存中的整个链表存盘保存。
CRandom2Dlg使用CFileRandom类实现具体操作。同样,与本文相关的源码都作了详细说明。
再次感谢您阅读本文,欢迎您批评指正。