变长资源容器恰好 EOF:WDF 包格式的解析铁律

格式解析 · 2026-09-20 · datanger.cn

这套客户端的全部资源都装在 .wdf(PFDW 容器)里:按 uid 索引、按块存储。解析器写出来一天就够,写对要靠几条用事故换来的铁律。

条目名的构成

包内条目名不是文件名,是一条拼装规则:

条目名 = 去掉 "TILE\" 前缀 + 目录原样 + 文件名转小写
例:TILE\SCENE\LIHUA\MAP.TEX  →  scene/lihua/map.tex

所以 find() 必须给全路径。只给文件名去查,命中不了任何条目——这是地形贴图全黑事故的根源之一:地形名带 tile\ 前缀,而包内条目没有,查找直接落空。

恰好 EOF

变长结构的解析终止条件是读到恰好 EOF。多读一字节或提前一字节停,都可能把下一个条目的头错位解析成合法数据——不崩溃,只是悄悄读错。校验办法只有一个:解析完最后一个条目时,文件指针必须精确等于文件长度。

md5 与 BlockSize

工具链上值得投入:一个零依赖的解包器(体检/列条目/按 uid 取字节/导目录树/贴图转 PNG)在本项目里被反复使用,回报远超编写成本。