把数据放到Exe文件里面有很多好处,理由也很多,比如:
- 隐藏数据,不想让用户看见。
- 数据太零散,小文件太多。
- 减少体积,提高加载速度等。
等等。这方面的例子也很多,就不细说了。我这里只说说将一类资源全部打包到一个压缩文件中,然后程序中读取的方法。
一个zip压缩包中,包含了大量的文件,并且还有多级目录,我们可以将整个资源全部提取出来,存入到一个内存文件(buffer)中。
从资源中提取数据到内存的方法很简单,代码如下:
bool LoadResToMemFile(unsigned int resid, const std::wstring res_type, MemFile* memfile)
{
bool ret = false;
HRSRC hResInfo = FindResource(m_hResource, MAKEINTRESOURCE(resid), res_type.c_str());
if (hResInfo)
{
HGLOBAL hResDat = LoadResource(m_hResource, hResInfo);
if (hResDat)
{
PVOID pResBuffer = LockResource(hResDat);
if (pResBuffer)
{
DWORD dwResBuffer = SizeofResource(m_hResource, hResInfo);
memfile->SetData(pResBuffer, dwResBuffer);
ret = true;
}
}
}
return ret;
}
在整个资源文件提取出来之后,需要将里面的每个文件都解析出来,并保存到一个映射表中,只有这样,才能保证在给出文件名称后,快速定位到该文件的内存。
这时需要定义好一个数据类型