本文来自李明子csdn博客(http://blog.csdn.net/free1985),商业转载请联系博主获得授权,非商业转载请注明出处!
本文介绍了笔者2010年11月设计的缓存文件格式。
1 索引文件
1.1 概述
扩展名:cai
用途:文件块在缓存文件中的索引;
依赖文件:无;
组织方式:文件头+记录;
1.2 文件头
文件头100字节定长,其中50-61Byte为当前使用段,其它预留。文件头存储分配如表1-1所示。
位 置 | 域 | 值 | 数据类型 |
Byte 0 | …… | …… | …… |
…… | …… | …… | …… |
Byte 50 | 记录总数 | 当前文件中的记录总数 | int |
Byte 54 | 记录长度 | 文件允许存入数据的最大长度 | ULONGLONG |
…… | …… | …… | …… |
Byte 100 | …… | …… | …… |
1.3 记录
记录320字节定长,其中Byte 308-Byte 319(12字节)预留。记录存储分配如表1-2所示。
位 置 | 域 | 值 | 数据类型 |
Byte 0 | 索引关键字 | 当前记录的索引关键字 | char |
Byte 256 | 扩展名 | 当前记录的扩展名 | char |
Byte 264 | 记录存在标志 | 当前记录是否存在可用(未删除) | BOOL |
Byte 268 | 记录时间到基准时间的秒数 | 当前记录创建时间 | unsigned __int32 |
Byte 272 | 记录时间到基准时间的秒数 | 当前记录最后访问时间 | unsigned __int32 |
Byte 276 | 记录访问次数 | 当前记录的访问次数 | int |
Byte 280 | 记录起始位置 | 当前记录的起始位置 | ULONGLONG |
Byte 288 | 大小 | 当前记录的大小 | ULONGLONG |
Byte 296 | 大小 | 当前记录在文件中的占用大小 | ULONGLONG |
Byte 304 | 校验值 | CRC32校验值 | unsigned long |
Byte 308 | 预留 | 预留 | 预留 |
…… | …… | …… | …… |
Byte 319 | 预留 | 预留 | 预留 |
上表中,主要域的说明如下:
- 索引关键字:记录在文件中的唯一标识符。
- 记录存在标志:记录是否仍然存在的标志。存在则为TRUE,已删除则为FALSE。
- 记录时间到基准时间的秒数:这里使用记录时间到基准时间的秒数,即“日历时间”来表示当前时间。此时间基数严格依赖于编译器(如Visual C++ 7.0为1899年12月31日0时0分0秒,Visual C++6.0为1970年1月1日0时0分0秒),所以使用该文件的应用程序的编译器应采用同一时间基数,否则请编写相关时间转换代码。考虑到当前访问该文件的应用程序均由相同编译器编译而成,暂不对时间基数进行记录,需要时请在预留文件头中加入时间基准点信息。
2 缓存文件
2.1 概述
扩展名:.cad
用途:缓存文件块的存储;
依赖文件:缓存索引文件;
组织方式:文件头+记录;
文件头:100字节定长文件头(预留);
记录:变长。
记录组织方式:记录块。
2.2 记录块
记录块为以二进制码流形式存储的实体数据。
位 置 | 域 | 值 | 数据类型 | |
Byte 0 | 文件数据块 | 文件数据块 | Byte | |
Byte …… | 文件数据块 | 文件数据块 | Byte | |
…… | …… | …… | …… |
上表中,主要域的说明如下:
- 文件数据块:以二进制码流形式写入缓存文件的文件。