关于 .DBF 文件的第一个字节以及如何检测使用的 xbase 版本(即文件其余部分的格式),我能编译的最全面的列表是:
字节 0 ------------ x xxx x 001 = 0x?1 未使用 0 000 0 010 = 0x02 福克斯基地 0 000 0 011 = 0x03 FoxBASE+/dBASE III PLUS,无备注 x xxx x 100 = 0x?4 dBASE 7 0 000 0 101 = 0x05 dBASE 5,无备忘录 0 011 0 000 = 0x30 视觉 FoxPro 0 011 0 001 = 0x31 Visual FoxPro,启用自动增量 0 011 0 010 = 0x32 Visual FoxPro、Varchar、Varbinary 或启用 Blob 0 100 0 011 = 0x43 dBASE IV SQL 表文件,无备注 0 110 0 011 = 0x63 dBASE IV SQL 系统文件,无备忘录 0 111 1 011 = 0x7B dBASE IV,带备忘录 1 000 0 011 = 0x83 FoxBASE+/dBASE III PLUS,带备忘录 1 000 1 011 = 0x8B dBASE IV,带备忘录 1 000 1 110 = 0x8E dBASE IV 与 SQL 表 1 100 1 011 = 0xCB dBASE IV SQL 表文件,带备忘录 1 110 0 101 = 0xE5 Clipper SIX 驱动程序,带 SMT 备忘录 1 111 0 101 = 0xF5 FoxPro 2.x(或更早版本)带备忘录 1 111 1 011 = 0xFB FoxBASE(带备忘录?) | ||| | ||| | ||| | ||| 位标志(并非用于所有格式) | ||| | ||| ---------------------------------- | ||| | +++-- 位 2、1、0,版本(x03 = 5 级,x04 = 7 级) | ||| +------ 位 3,备忘录文件的存在 | +++-------- 位 6、5、4,存在 dBASE IV SQL 表 +------------ 位 7,.DBT 文件的存在
通过读取初始 .DBF 字节可以采用哪种标头格式?(即,该文件使用版本 2 标头、版本 3 到 5 标头还是版本 7 标头?)目前还不清楚最好的逻辑是什么……