作为“角摩手机电子书专家”下一个版本的参考!
PDB文件结构
PDB是Palm Database的缩写,是一种简单格式的二进制文件,只要弄清楚了pdb文件的格式,就可以在PC上读写它。
1、 PDB文件的总体结构
PDB文件总体上由以下三个部分组成,
文件头(Header)
记录索引(Record Entry Index)
记录数据(Record Data)
文件头里面主要包括数据库名称、属性、创建时间等一些信息。记录索引有点像书本的目录部分,可以根据这个目录查到第几个记录在“第几页”(偏移量offset)。数据部分才是真正的数据。
2、 文件头
文件头的结构如下:
![](http://www.tompda.com/bbsimgx/tompda_118738_pdb-header-table.gif)
用UltraEdit打开一个PDB文件来进行实力分析
PDB头
Database Name
![](http://www.tompda.com/bbsimgx/tompda_118740_pdb-header.gif)
图中涂蓝的部分为数据库名称(Database Name), 共21个字节,以空字符00 00结尾
Create Time、Modified Time、Backup Time
12字节
Type、Creator ID
8个字节
Records Count
2个字节
文件头结束
3、记录数据
记录索引
![](http://www.tompda.com/bbsimgx/tompda_118741_pdb-record-index.gif)
第一条记录的索引
第n条记录索引的计算公式:
78+(n-1)*8
记录数据
由第2条记录的索引可知,第2条记录的数据部分开始于00 00 00 80处,
![](http://www.tompda.com/bbsimgx/tompda_118742_record-data.gif)
弄清了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读写。
PDB文件结构
PDB是Palm Database的缩写,是一种简单格式的二进制文件,只要弄清楚了pdb文件的格式,就可以在PC上读写它。
1、 PDB文件的总体结构
PDB文件总体上由以下三个部分组成,
文件头(Header)
记录索引(Record Entry Index)
记录数据(Record Data)
文件头里面主要包括数据库名称、属性、创建时间等一些信息。记录索引有点像书本的目录部分,可以根据这个目录查到第几个记录在“第几页”(偏移量offset)。数据部分才是真正的数据。
2、 文件头
文件头的结构如下:
![](http://www.tompda.com/bbsimgx/tompda_118738_pdb-header-table.gif)
用UltraEdit打开一个PDB文件来进行实力分析
PDB头
Database Name
![](http://www.tompda.com/bbsimgx/tompda_118740_pdb-header.gif)
图中涂蓝的部分为数据库名称(Database Name), 共21个字节,以空字符00 00结尾
Create Time、Modified Time、Backup Time
12字节
Type、Creator ID
8个字节
Records Count
2个字节
文件头结束
3、记录数据
记录索引
![](http://www.tompda.com/bbsimgx/tompda_118741_pdb-record-index.gif)
第一条记录的索引
第n条记录索引的计算公式:
78+(n-1)*8
记录数据
由第2条记录的索引可知,第2条记录的数据部分开始于00 00 00 80处,
![](http://www.tompda.com/bbsimgx/tompda_118742_record-data.gif)
弄清了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读写。