Chinaunix首页 | 论坛 | 博客
  • 博客访问: 9727902
  • 博文数量: 1227
  • 博客积分: 10026
  • 博客等级: 上将
  • 技术积分: 20273
  • 用 户 组: 普通用户
  • 注册时间: 2008-01-16 12:40
文章分类

全部博文(1227)

文章存档

2010年(1)

2008年(1226)

我的朋友

分类: C/C++

2008-04-23 22:05:11

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

作者:

以下是本人使用C 实现二进制文件随机存取的两种常用方法,写出来,让您见笑,还望方家点拨。

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

设计思想:

每一条记录的记录编号,决定该记录的存取位置。如:第一条记录记录编号是1,放在位置1;第二条记录的记录编号是2,放在位置2;………,依次类推。
要修改第二条记录,首先根据记录编号计算出该记录的存储位置,然后将内置指针直接调至此处,进行修改。
新添记录,可根据它的记录编号存储到文件的相应位置。
这种随机存取方法通俗易懂,简便易行。适用于记录条数不多的文件,要求记录编号尽可能连续。其缺点是存储记录不连续,占用空间大。
工程Random1演示了这种方法,建议您先演示工程,在对该工程有一个了解的基础上再阅读代码。代码中已经对与本文相关的语句作了详细说明,您可以非常方便地读懂。

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

设计思想:

对文件进行操作前,先把文件读入内存,做成链表以方便操作,操作完毕后存盘保存。
这种方法由于使用链表指针,对记录的增加、删减都非常方便。
这种方法不需要记录编号,记录存储连续,占用空间小。其缺点是对程序设计人员要求较高,必须对链表指针有一定了解。
工程Random2演示了这种方法,同样建议您先演示工程,在对该工程有一个了解的基础上再阅读代码。

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

  工程新建了一个类CFileRandom实现文件的随机操作。成员函数add用于增加一个记录;change可以修改一个记录;DescentSort实现降序排列;Display显示所有记录;Read把所有记录调入内存;Remove用于删除一条记录;Save用于将内存中的整个链表存盘保存。
CRandom2Dlg使用CFileRandom类实现具体操作。同样,与本文相关的源码都作了详细说明。

再次感谢您阅读本文,欢迎您批评指正。


阅读(338) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~