65.9K
CodeProject 正在变化。 阅读更多。
Home

DataStore - 用于创建顺序访问记录文件的模板类

starIconstarIconstarIconemptyStarIconemptyStarIcon

3.00/5 (10投票s)

2003年8月26日

BSD

2分钟阅读

viewsIcon

86463

downloadIcon

1383

用于创建顺序访问记录文件的模板类。

引言

"DataStore" 是一个模板类,它以一种简单的方式封装了 C 文件处理例程。它可以代替 C++ iostream 类,方便地序列化 C++ 对象。

背景

要理解这里提供的代码,您应该具备基本的面向对象编程 (OOP) 和 C++ 模板知识。

使用代码

要使用 DataStore,首先使用 #include 预处理器指令包含 datastore.hDataStore 的模板参数必须是结构体或类的名称,"DataStore" 将读取和写入该结构体或类的对象到文件中。DataStore 的构造函数将磁盘文件名作为其参数。必须在使用 Open() 函数打开文件后才能进行任何读/写操作。如果文件不存在,则会创建该文件。

struct Point 
{
  int x;
  int y;
};

DataStore ds("points.dat");
ds.Open();

要将对象写入文件,请调用 AddRecord() 成员函数。新记录将被附加到文件的末尾。

Point p;
p.x = 10;
p.y = 30;
ds.AddRecord(p);

DataStore 根据记录在文件中的位置搜索记录。为此,您必须将记录的位置传递给 FindRecord() 成员函数。以下代码从文件中读取第一条记录

Point pf = ds.FindRecord(0);
要根据某些条件搜索特定记录,您应该首先获取文件中记录的总数,然后循环遍历整个文件,直到找到该记录。
unsigned long recs = ds.GetRecordCount();
bool found = false;
for (unsigned long i=0;i

同样,ModifyRecord()DeleteRecord() 函数将记录索引作为其参数,以对文件执行操作。

ds.ModifyRecord(new_point,1);
ds.DeleteRecord(0);

文件操作完成后,您应该调用 DataStore 对象的 Close() 函数以释放文件句柄。

ds.Close();

演示项目创建一个新的数据文件,并将 100000 条记录插入其中。然后,它允许您添加新记录并执行其他文件操作。(添加操作是自动执行的。)随着记录数量的增加,您会发现搜索较新的记录会变得更慢。可以通过使用 BDB 等库添加索引支持来解决此问题。但只要您的应用程序不需要存储数百万条记录,您就可以对 DataStore 类感到满意。

© . All rights reserved.