无线我的无限

让无线技术给生活带来无限快乐
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

[转帖]PDB文件格式详解

Posted on 2008-06-30 00:08  freemobile  阅读(7666)  评论(0编辑  收藏  举报
作为“角摩手机电子书专家”下一个版本的参考!

PDB文件结构

PDB是Palm Database的缩写,是一种简单格式的二进制文件,只要弄清楚了pdb文件的格式,就可以在PC上读写它。

1、 PDB文件的总体结构
PDB文件总体上由以下三个部分组成,

文件头(Header)
记录索引(Record Entry Index)
记录数据(Record Data)


文件头里面主要包括数据库名称、属性、创建时间等一些信息。记录索引有点像书本的目录部分,可以根据这个目录查到第几个记录在“第几页”(偏移量offset)。数据部分才是真正的数据。

2、 文件头
文件头的结构如下:

用UltraEdit打开一个PDB文件来进行实力分析
PDB头

Database Name

图中涂蓝的部分为数据库名称(Database Name), 共21个字节,以空字符00 00结尾

Create Time、Modified Time、Backup Time
12字节

Type、Creator ID
8个字节

Records Count
2个字节

文件头结束

3、记录数据

记录索引

第一条记录的索引




第n条记录索引的计算公式:
78+(n-1)*8

记录数据

由第2条记录的索引可知,第2条记录的数据部分开始于00 00 00 80处,



弄清了pdb的结构,可以用编写程序读写它,我用Delphi定义了一个pdb的类,

//class PDB
type
   TPDB=class
private
FDBName:String;
FFlags:integer;
FCreateTime:TDateTime;
FModifiTime:TDateTime;
FType1:String;
FCreatorID:String;
FRecordCount:integer;
FIndex:array of integer;
FAttrib:array of integer;
FRecSize:array of integer;
FData:array of String;
procedure SetDBName(const Value: string);
procedure SetFlags(const Value: integer);
procedure SetCreateTime(const Value: TDateTime);
procedure SetModifiTime(const Value: TDateTime);
procedure SetType1(const Value: String);
procedure SetCreatorID(const Value: String);
procedure SetRecordCount(const Value: integer);

public
Constructor create(pdbfile:string);
property DBName: string read FDBName write SetDBName;
property Flags:integer read FFlags write SetFlags;
property CreateTime:TDateTime read FCreateTime write SetCreateTime;
property ModifiTime:TDateTime read FModifiTime write SetModifiTime;
property Type1:String read FType1 write SetType1;
property CreatorID:String read FCreatorID write SetCreatorID;
property RecordCount:integer read FRecordCount write SetRecordCount;
function GetRecords(i:integer):string;
end;

接下来可以用一个文件流TFileStream读写。