本文来自李明子csdn博客(http://blog.csdn.net/free1985),商业转载请联系博主获得授权,非商业转载请注明出处!
本文介绍了笔者2010年11月设计的缓存文件格式。
1.1 概述 扩展名:cai 用途:文件块在缓存文件中的索引; 依赖文件:无; 组织方式:文件头+记录; 1.2 文件头 文件头100字节定长,其中50-61Byte为当前使用段,其它预留。文件头存储分配如表1-1所示。
表1-1 文件头存储分配 位 置 域 值 数据类型 Byte 0 …… …… …… …… …… …… …… Byte 50 记录总数 当前文件中的记录总数 int Byte 54 记录长度 文件允许存入数据的最大长度 ULONGLONG …… …… …… …… Byte 100 …… …… ……1.3 记录 记录320字节定长,其中Byte 308-Byte 319(12字节)预留。记录存储分配如表1-2所示。
表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.1 概述 扩展名:.cad 用途:缓存文件块的存储; 依赖文件:缓存索引文件; 组织方式:文件头+记录; 文件头:100字节定长文件头(预留); 记录:变长。 记录组织方式:记录块。 2.2 记录块 记录块为以二进制码流形式存储的实体数据。
表2-1 记录块存储分配 位 置 域 值 数据类型 Byte 0 文件数据块 文件数据块 Byte Byte …… 文件数据块 文件数据块 Byte …… …… …… ……上表中,主要域的说明如下:
文件数据块:以二进制码流形式写入缓存文件的文件。