C ++是否有与Qt一起提供的平台无关资源系统(但没有Qt依赖关系)?
我想从我的C ++源代码中访问任意数据。也就是说,不仅是图标,还有翻译或着色器等。
或者某种类型的虚拟文件系统库可以访问,例如ZIP压缩文件等也符合我的需要。
答案 0 :(得分:9)
我为C ++ Web服务器项目推出了自己的系统,该项目基本上采用了大量文件(HTML,CSS,JS,PNG等)并创建了包含编码为static const char*
的数据的C ++标头。然后我#include
那些我需要访问数据的标题。编码“资源”文件的应用程序作为预构建步骤执行。编码应用程序本身使用boost::filesystem
来创建资源标头,因此适用于Windows / * nix。
典型的资源文件可能如下所示:
namespace resource
{
// Generated from mainPage.htm
static const char* mainPage_[] =
{
"<html>...</html>"
};
}
对于二进制内容,我使用\x
表示法进行编码。我还确保对数据进行换行,以便在编辑器中可读。
我确实遇到了一些问题 - MS编译器不允许static const char*
大于64Kb,这是一个PITA。幸运的是,唯一比这更大的文件是我可以轻松拆分成较小块的JavaScript文件 - 但是大图像会成为问题。
答案 1 :(得分:1)
xxd
对this question的回答是您正在寻找的。 p>
答案 2 :(得分:0)
我们正在使用ICU ResourceBundle,并且非常满意。
使用pkgdata tool,ResourceBundles的打包非常灵活:作为共享库,静态库或可由ICU进行内存映射的文件。
答案 3 :(得分:0)
我刚刚在链接时将它们作为二进制blob修补到可执行文件的末尾。最后4个字节是前一个块的大小,然后让程序从尾部读取数据项。
如果你需要更多的文件系统类型结构(虽然我没有尝试过),另一种方法是将所有内容放在一个zip文件中并将其追加到最后。再次,你需要一些容易找到的数据添加数据。