转贴一篇文章:
DBF等数据库文件的结构分析
XBase .DBF/.DBT(.FPT) 文件结构分析
************* .DBF 结构 *************
Offset Bytes Description
------ ------- --------------------------------------------------------------
一、(文件头, 长 20H 字节, 以下 DW, DD 都是 intel 格式(low/high order) )
0000H 1 结构标志: 03H --- DBASE III (FoxBase/CLIPPER/FoxPro 与之兼容)
83H --- FoxBase + 2.0/2.1
F5H --- FoxPro 2.0/2.5
0001H 3 文件修改日期: 如 5FH, 03H, 0BH 表示 1995.03.11
0004H 4 (DD) 总记录数
0008H 2 (DW) 文件头加结构描述部分的长度
000AH 2 (DW) 每条记录的长度
000CH 20 保留(00H)
二、(各个字段的结构描述部分, 每个字段的说明占 20H 字节, 字段数最多为 128 个)
+00H 10 字段名(大写), 以 00H 补齐, 字段名由字母(或下划线、汉字)或数字
串组成, 但第一个字符不能是数字, 中间也不允许有空格
+0AH 1 字段名结束符(00H)
+0BH 1 字段类型: 'C' --- Character; 'N' --- Numeric; 'D' --- Date;
'L' --- Logical; 'M' --- Memo;
FoxPro: 'F' --- Float
+0CH 4 (DD) 字段数据相对于该记录的偏移量,第一个字段一般为00000001H
若为 00000000H 或 大于 00001000H 则需要通过计算确定
+10H 1 字段宽度( Character: 最长 254 字节, Numeric: 最长 19 位,
Date: 08H, Logical: 01H, Memo: 0AH )
+11H 1 小数点后位数(Character/Date/Logical/Memo: 00H)
+12H 14 保留(00H)
...........................
1 字段结构描述结束符(0DH), 也可能是 2 个字节(0DH,00H)
三、(以下是每条记录的内容, 各字段间和各条记录间均无分隔符, 顺序存放)
注: 1. 每条记录的第一字节为删除标志: 20H(' ') --- 正常记录
2AH('*') --- 有删除标记的记录
2. 每条记录字符数最多为 4000
3. Char 型数据右边以空格补齐
4. Number 型数据也以ASCII码存放(负数前有'-'号), 右对齐
小数包括'.', 右边不足的小数位以'0'补齐, 左边以空格补齐
5. Date 型数据以ASCII码存放, 如' ','19950311', '20990517'
6. Logical 型数据以ASCII码存放, 'F' 或 ' ' 表示 .F., 'T' 表示 .T.
7. Memo 型数据以ASCII码存放在相应 .DBT/.FPT 文件中的起始块号, 占 10 个
字节,右对齐,如 ' 5' 表示 .DBT 的第 6 块, 若 10 个字节全为空
格,表示无内容
四、(文件结束符: 1 字节 (=1AH) )
****************** .DBT/.FPT 结构 ******************
DBASE III/FoxBase 的备注型字段内容存放在相应的 .DBT 文件中, 而 FoxPro 则存
放在相应的 .FPT 文件中, .DBT/.FPT 文件包括文件头( h 块)和文件体( b 块). 所有的
块都有编号, 文件头第一块的块号为 0
每条记录的一个 Memo 字段对应于 .DBT/.FPT 的 0 块或连续的 n 块(对 DBASE III,
n 最大为 8), 其内容每一行的硬回车以 0DH, 0AH 表示(.DBT 最后还可以有软回车, 以
8DH, 0AH 表示)
.DBT 中字段的实际内容以 1AH 作为结束, 其后以 00H 补齐一块(最后一块不补齐)
数据库经过多次修改后, 某些块可能不对应于 .DBF 的记录, 成为无效的块
.DBT 的块长为 200H 字节. 文件头占一块(h = 1), 文件头前 4 字节(DD) 表示 .DBT
文件的总块数, 后 252 字节保留(00H)
.FPT 的块长随文件而异(一般为 40H 字节, 也可以是 21H 字节等). 文件头占一块或
多块, 文件头偏移 0---3 共 4 字节( high/low 格式) 表示 .FPT 文件的总块数, 文件头
偏移 4---7 共 4 字节( high/low 格式) 表示 .FPT 文件的块长, 其后的字节保留(00H).
字段内容对应的连续 n 块中其首块偏移 0---3 共 4 字节( high/low 格式) 表示计数单
位(一般为1), 偏移 4---7 共 4 字节( high/low 格式) 表示 .FPT 字段内容有效长度,
其后的字节才是字段实际内容, 最后一般以 00H 补齐一块(文件的最后一块不补齐)