2023年12月18日发(作者:)

DBF文件格式说明

DBF文件格式说明

DBF文件是一种以二进制进行存储的表格数据文件,其文件内部有着严格的格式要求,具体由文件头和记录项组成。其中文件头中包括字段的相关信息。DBF文件的数据结构如下表所示:

组成

文件头

内容 位置(Byte) 说明

包括版本信息、更新时间、记录条数、文件头长度等

字段名称、类型、字段长度(Byte)、精度等

同上

同上

同上

表示终止字段定义

表示第1行数据

表示第2行数据

文件头定义

0-31

字段1定义

32-64

字段2定义

65-97

……

字段n定义

-n*32+31

值为0x0D

n*32+32

表格记录数据 第1行数据

n*32+33-X

第2行数据

……

注意,在表格记录数据中每行数据具体占多长字节,这个由文件头中定义的字段数目以及字段长度来决定,如果该文件一共只有两个字段,其中第一个字段为数值,其长度为4,第二个字段为字符串,长度为50,则每一行数据占的字节长度为4+50=54,在读取数据时也是读取前4个为第一个字段对应的值,读取第5-54个为第二个字段对应的值。

另外,为便于理解表格与下面内容的关系,特说明字段即是指表格中的列,记录指表格中的行数据,DBF按行数据方式来存储,即在文件头中定义了列数、列的名称、列的数据类型、列长度等等,然后在后面的记录数据中插入每行数据。

文件头中格式及说明如下:

位置

0

1个字节 表示当前的版本信息:

类型 说明

0x02 FoxBASE

0x03 FoxBASE+/Dbase III plus, no memo

0x30 Visual FoxPro

0x31 Visual FoxPro, autoincrement enabled

0x43 dBASE IV SQL table files, no memo

0x63 dBASE IV SQL system files, no memo

0x83 FoxBASE+/dBASE III PLUS, with memo

0x8B dBASE IV with memo

0xCB dBASE IV SQL table files, with memo

0xF5 FoxPro 2.x (or earlier) with memo

0xFB FoxBASE

1-3个字节 表示最近的更新日期,按照YYMMDD格式,以1900年为起始,即第一个字节表示文3

件最后保存时的年份-1900,第二个字节的值为保存时的月,第三个字节的值为保存时的日。

4-7

8-9

10-11

122个字节 保留字节,用于以后添加新的说明性信息时使用,这里用0来填写。

-13

14

1个字节 表示未完成的操作。

15

1个字节 dBASE IV编密码标记。

1612个字节 保留字节,用于多用户处理时使用。

-27

28

1个字节 DBF文件的MDX标识。在创建一个DBF 表时 ,如果使用了MDX 格式的索引文件,那么 DBF 表的表头中的这个字节就自动被设置了一个标志,当你下次试图重新打开这个DBF表的时候,数据引擎会自动识别这个标志,如果此标志为真,则数据引擎将试图打开相应的MDX 文件。

29

1个字节 页码标记.

302个字节 保留字节,用于以后添加新的说明性信息时使用,这里用0来填写。

-31

个这段长度由表格中的列数(即字段数,Field Count)决定,每个字段的长度为32,如32(x*32)-N

字节 果有x列,则占用的长度为x*32,这每32个字节里面又按其规定包含了每个字段的名称、类型等信息,具体见下面的表。

Int16

一条记录中的字节长度,即每行数据所占的长度

Int16

文件头中的字节数,在此之后的字节为表格记录数据

Int32

文件中的记录条数,即表格的行数。

N1个字节 作为字段定义的终止标识,值为0x0D。

+1

每个字段定义格式如下表,每个字段定义都用32个字节来完成:

位置 内容

0-11个字段的名称,是ASCII码值。

10

字节

11

1个字字段的数据类型,为ASCII码值。每个值对应不同的字段数据类型,如N表示数值,C节 表示字符串,关于具体的数据类型说明见下表。

12-4个字保留字节,用于以后添加新的说明性信息时使用,默认为0。

15

说明

16

1个字字段的长度,表示该字段对应的值在后面的记录中所占的长度。

17

1个字字段的精度。

18-2个字保留字节,用于以后添加新的说明性信息时使用,默认为0。

19

20

1个字工作区ID。

21-11个保留字节,用于以后添加新的说明性信息时使用,默认为0。

31

字节

字段数据类型:

代码

B

C

D

数据类型

二进制型

字符型

日期型

各种字符。

各种字符。

用于区分年、月、日的数字和一个字符,内部存储按照YYYYMMDD格式。

允许输入的数据

G (General or OLE)

各种字符。

N

数值型(Numeric)

- . 0 1 2 3 4 5 6 7 8 9

? Y y N n T t F f (? 表示没有初始化)。

L

逻辑型(Logical)

M (Memo)

各种字符。