DBF文件结构中文说明
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
标准的DBF文件,是由头文件和实体信息两部分构成(如图所示)。
1)文件的文件头
其中文件头部分的长度是不定长的,它主要对DBF文件作了一些总体说明(表),其中
最主要的是对这个DBF文件的记录项的信息进行了详细地描述,比如对每个记录项的名称、数据类型、长度等信息都有具体的说明。
2)文件的实体信息
实体信息部分就是一条条记录,每条记录都是由若干个记录项构成,因此只要依次循环
读取每条记录就可以了。
3)一个读取dbf文件的例子
假设要读取一个名为soil的dbf文件(存储了土地利用信息),它含有8个记录项, 记录项信息如表所示:
2、行情文件格式 说明:
(1)、表文件由头记录及数据记录组成。头记录定义该表的结构及与表相关的其他信息。数据 记录紧接在头记录之后,包含字段中实际的文本。记录的长度等于所有字段定义的长度之和 (以 字节为单位)。
(2) 、头记录以终止符(OxOD )结束,数据记录以终止符( (3) 、表文件中存储整数时低位字节在前。
(4) 、数据记录从删除标记字节开始。如果删除标记字节为 未被删除,如果该字节为星号 (0x2A ),则表示该记录被删
除。
名的各字段的数据。
(5)、数据记录都是用 ASCII 码形式存放的,所以只要读岀文件头和字段类型描述区的内容, 就可以直接读取 dbf 文件中的每条记录。
0x1A )结束。 ASCII 空格(0x20),则表示该记录 在删除标记之后是字段记录中所命
32 - n 字段子记录
字段的数目决定了字段子记录的数目。
字段记录结构(32字节)
F面是读取这个dbf文件的代码:
void On ReadDbf(CStri ng Dbf)
fread(&RecordByteNum, sizeof(short), 1,m_Dbf);
FILE* m_Dbf;
〃****Dbf 文件指针
II 打开dbf 文件
if((m_Dbf(Dbf,"rb"))==NULL) {
return;
} int i,j;
//////**** 读取dbf 文件的文件头 开始
BYTE versio n; fread(&versio n,
1,
1,m_Dbf); BYTE date[3]; for(i=0;i<3;i++) {
fread(date+i,
}
fread(&HeaderByteNum, sizeof(short), 1,m_Dbf);
short RecordByteNum
int RecordNum; fread(&RecordNum, short HeaderByteNum;
//****** sizeof( in
t),
1, i_Dbf);
1, 1,m_Dbf);
short Reservedl;
1,m_Dbf); Dbf);
_Dbf);
m_Dbf); fread(&Reserved1,
BYTE Flag4s;
fread(&F lag4s,
BYTE En crypteFlag;
fread(&En
crypteFlag,
sizeof(short), 1,m_Dbf);
sizeof(BYTE),
sizeof(BYTE), 1,m_
for(i=0;i<3;i++)
{
fread(&Unu sed,
}
BYTE MDXFlag;
fread(&MDXFIag, sizeof(BYTE), 1,m
BYTE LDriID;
fread(&LDrilD,
short Reserved2;
fread(&Reserved2, sizeof(short), 1,m_Dbf);
BYTE n ame[11];
sizeof( in t), 1,m
i_Dbf)
;
sizeof(BYTE), 1, BYTE fieldType;
int Reserved3; fread(&decimalCou nt,sizeof(BYTE), 1,m_Dbf); IIReserved4——2 bytes
BYTE fieldLength; BYTE decimalCou nt; short Reserved4; BYTE workID; short Reserved5[5]; BYTE mDXFIag1; int fieldsco unt;
fieldscount = (HeaderByteNum - 32) / 32;
II 读取记录项信息-共有
8个记录项 for(i=0;i<
HeaderByteNum;i++) {
IIFieldName ——11 fread( name, IIFieldType ——1 fread( &fieldType, IIReserved3——4 Reserved3
fread(&Reserved3, sizeof(i nt), 1,m_Dbf);
IIFieldLe ngth--1
bytes
fread( &fieldLe ngth,sizeof(BYTE), 1,m_Dbf); IIDecimalCou nt-1
bytes
bytes 11, 1,m_Dbf);
bytes
sizeof(BYTE), 1,m_Dbf);
bytes =0;