DBF文件由两部分组成,
第一部分是结构描述,即文件头信息;共32个字节(0~31)
第二部分是表本身的内容,该部分又分为两个部分:
前一部分是表的结构说明,共32个字节具体的内容见下表1
后一部分是字段描述区,从第32个字节开始到十六进制结束字符0x0D。具体包括内容见表2
BDF文件头的详细格式:
在文件中的位置 | 内容 | 说明 |
0 | 1个字节 | 表示当前的版本信息 |
1-3 | 3个字节 | 表示最近的更新日期,按照YYMMDD格式。 |
4-7 | 1个32位数 | 文件中的记录条数。 |
8-9 | 1个16位数 | 文件头中的字节数。 |
10-11 | 1个16位数 | 一条记录中的字节长度。 |
12-13 | 2个字节 | 保留字节,用于以后添加新的说明性信息时使用,这里用0来填写。 |
14 | 1个字节 | 表示未完成的操作。 |
15 | 1个字节 | dBASE IV编密码标记。 |
16-27 | 12个字节 | 保留字节,用于多用户处理时使用。 |
28 | 1个字节 | DBF文件的MDX标识。在创建一个DBF 表时 ,如果使用了MDX 格式的索引文件,那么 DBF 表的表头中的这个字节就自动被设置了一个标志,当你下次试图重新打开这个DBF表的时候,数据引擎会自动识别这个标志,如果此标志为真,则数据引擎将试图打开相应的MDX 文件。 |
29 | 1个字节 | Language driver ID. |
30-31 | 2个字节 | 保留字节,用于以后添加新的说明性信息时使用,这里用0来填写。 |
32-X | (n*32)个字节 | 记录项信息描述数组。n表示记录项的个数。这个数组的结构在表2.8中有详细的解释。 |
X+1 | 1个字节 | 作为记录项终止标识。 |
DBF文件头中记录项的详细格式:
位置 | 内容 | 说明 |
0-10 | 11个字节 | 记录项名称,是ASCII码值。 |
11 | 1个字节 | 记录项的数据类型,是ASCII码值。(B、C、D、G、L、M和N,具体的解释见表2.9)。 |
12-15 | 4个字节 | 保留字节,用于以后添加新的说明性信息时使用,这里用0来填写。 |
16 | 1个字节 | 记录项长度,二进制型。 |
17 | 1个字节 | 记录项的精度,二进制型。 |
18-19 | 2个字节 | 保留字节,用于以后添加新的说明性信息时使用,这里用0来填写。 |
20 | 1个字节 | 工作区ID。 |
21-30 | 10个字节 | 保留字节,用于以后添加新的说明性信息时使用,这里用0来填写。 |
31 | 1个字节 | MDX标识。如果存在一个MDX 格式的索引文件,那么这个记录项为真,否则为空。 |
00:数据库名称 0x03:foxbase+、foxpro
0x83:foxbase+、dbaseIII
01-03:最好更新日期,格式为yymmdd
04-07:记录个数
08-09:字段信息占用的字节数
10-11:记录信息占用的字节数
12-13:保留
14: dbaseIV标志
15:加密标志
16-27:dBaseIV多用户环境下的用户名称
28:是否存在索引文件
29:dBaseIV语言引擎ID号
30-31:保留
32-n:字段信息
n+1:文件头结束标志0x0d(后面的字节就是记录信息了)
字段信息:
每32字节表示一个字段
0-10:字段名称(ASCII字符,以0x00结束)
11:字段类型
12-15:在记录中的显示位置
16:字段长度
17:小数点位置
18-19:保留
20:dBaseIV工作区ID
21-30:保留
31:该字段是否索引字段
字段类型:
c:字符型
d:日期型号,格式为yyyymmdd
f:float point
g:通用型
l:逻辑型
m:memo型
n:整形
p:图像
解读:
低字节在前,所以要取字段总数时,应该用如下方法:
记录总数 = 第4个字节+256 1次方*第5字节+256 2*第6字节+256 3*第7字节
注意:
字段名 以ASCII码方式存放,最大长度是10个字符,若字段名长度少于10个字符则以空字符(0x00)填充
字段类型 以ASCII码方式存放,1个字符,其值为
Field type:
C – Character
Y – Currency
N – Numeric
F – Float
D – Date
T – DateTime
B – Double
I – Integer
L – Logical
M – Memo
G – General
C – Character (binary)
M – Memo (binary)
P – Picture
+ – Autoincrement (dBase Level 7)
O – Double (dBase Level 7)
@ – Timestamp (dBase Level 7)
DBF数据表文件的结构结束标志为"0x0D",占1个字节。对于VFP表文件从"0x0D"所在的字节开始的263B用于描述自由表或数据库表的相关信息(若为自由表则取值全为零)。
其VFP表文件长度 = 32(文件头)+32*字段个数+1(结束标志)+263。然后是数据部分记录1、记录2……记录n
各记录均为定长格式,以ASCII码方式顺序存放。每个记录的第一个字节是删除标志,若记录被删除,则该字节为0x2A即"*";否则为0x20即空格。
各记录间无分隔符
整个文件的结束标志为0x1A,位于最后一个记录之后的一个字节中。