DBF文件结构中文说明

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;

相关文档
最新文档