将文件嵌入到程序中

时间:2010-02-18 03:28:27

标签: c++ file embedded-resource

我想在程序中嵌入一个文件。如果没有提供默认配置文件,它将用于默认配置文件。我已经意识到我可以使用默认值,但我想提取文件并将其放在磁盘上以便修改。

4 个答案:

答案 0 :(得分:3)

嵌入是否意味着在没有文件的情况下分发程序?

然后,您可以将其转换为构建工具链中的配置初始化代码。添加makefile步骤(或您正在使用的任何工具) - 将此.cfg文件转换为初始化配置数据结构的某些C ++代码文件的脚本。这样你就可以修改.cfg文件,重建项目,并在里面反映新值。

顺便说一下,在Windows上,您可以将数据嵌入resource file

答案 1 :(得分:2)

嵌入数据通常称为“资源”。 C ++不提供本机支持,但可以几乎所有可执行文件格式进行管理。尝试搜索c ++的资源管理器。

答案 2 :(得分:2)

您可以做的一件事是将文件数据表示为静态字节数组:

// In a header file:
extern const char file_data[];
extern const size_t file_data_size;

// In a source file:
const char file_data[] = {0x41, 0x42, ... };  // etc.
const size_t file_data_size = sizeof(file_data);

然后文件数据将只是一个编译到您的可执行文件中的全局字节数组,您可以在任何地方引用它。您必须重写文件处理代码才能处理原始字节数组,或者使用fmemopen(3)之类的东西从数据中打开伪文件句柄并将其传递给文件处理代码。

当然,要将数据转换为此表单,您需要使用某种预处理步骤将文件转换为编译器可以接受的字节数组。 makefile对此有好处。

答案 3 :(得分:-2)

如果是任何Unix,请查看使用mmap(2)将文件映射到进程内存。 Windows有类似的东西,但我从未玩过它。