zoukankan      html  css  js  c++  java
  • [转帖]PDB文件格式详解

    作为“角摩手机电子书专家”下一个版本的参考!

    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读写。




  • 相关阅读:
    层次状态机【转】
    工作中常用的英文单词缩写
    一个页面如何放多个百度编辑器 Ueditor 1.4.3?PHP如何获取Ueditor 的值?
    C/C++的开发环境安装
    Ubuntu 14 如何打开 .chm格式文档?
    #ThinkPHP_3.2.2模型# where查询条件汇总
    Ubuntu 14 编译安装 PHP 5.4.45 + Nginx 1.4.7 + MySQL 5.6.26 笔记
    PHP文件夹文件拷贝/复制函数 dir_copy($src = '', $dst = '')
    Ubuntu 14中,Foxmail关联163邮箱账号时,总提示“密码错误”的解决方案
    Ubuntu 14 修改默认打开方式
  • 原文地址:https://www.cnblogs.com/freemobile/p/1232200.html
Copyright © 2011-2022 走看看