【问题标题】:Reading DBF File Structure in VB.Net as binary file将 VB.Net 中的 DBF 文件结构读取为二进制文件
【发布时间】:2013-04-04 09:44:42
【问题描述】:

我在 VB.Net 中将 DBF 作为二进制文件打开以确定结构。我必须这样做,因为使用 Visual Foxpro OLEDB 驱动程序不会返回十进制字段的精度和小数位数。我成功地完成了我的任务,没有任何问题。我遇到的问题是这样的:

字节 0 是 DBF 文件类型。
字节 1-3 是最后一次更新 (yymmdd)。
DBF 文件的字节 4-7 是文件中的记录数。
字节 8-9 是第一个数据记录的位置。
字节 10-11 是一条数据记录的长度,包括删除标志。
(此信息来自http://www.dbf2002.com/dbf-file-format.html

以下是我的 DBF 文件的前 32 个字节,用连字符分隔:

48-13-2-6-158-0-0-0-168-9-18-3-0-0-0-0-0-0-0-0-0-0-0-0 -0-0-0-0-1-3-0-0

“48”(十六进制 30)表示 Visual Foxpro
字节 1-3 表示该文件的最后更新日期为 2013 年 2 月 6 日。
字节 4-7 表示该文件有 158 条记录。
这些都是正确的。

字节 8-9 是 168 和 9,字节 10-11 是 18 和 3。

实际记录大小为 786 字节。由于有68个字段,所以第一条数据记录的位置应该是(68x32+31) = 2207。

是否需要进行一些转换才能将 1689 转换为 2207 和 183 转换为 786?

我已尝试将 dec 转换为十六进制,反之亦然。

【问题讨论】:

    标签: foxpro dbf


    【解决方案1】:

    我认为你的 2207 不正确,但 786 是正确的。

    我相信这些值基于由 256 的幂表示的低/高字节位置,因为它也在备忘录文件中处理,但价值 4 个字节......

    18 * 256^0 ( to the power 0 )  = 18 * 1  = 18
     3 * 256^1 ( to the power 1 )  = 3 * 256 = 768
    
    18 + 768 = 786
    

    现在,其他的也一样……

    168 * 256^0 ( to the power 0 )  = 168 * 1  = 168
      9 * 256^1 ( to the power 1 )  = 9 * 256 = 2304
    
    168 + 2304 = 2472
    

    【讨论】:

    • 做到了!为什么其他值不需要这样做?
    • @Richard,可能是因为最大字段数的偏移量将超过 255 个字节,但是低/高顺序的 2 个字节将允许最多 65535 个字节的标头(永远不会发生),所以他们只需要两个字节。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多