【问题标题】:How to store a file inside an executable如何将文件存储在可执行文件中
【发布时间】:2020-07-14 07:02:39
【问题描述】:

我想知道是否可以将图像或其他文件存储在可执行文件中,然后在运行时使用(例如在屏幕上显示图像)。

我知道存在可自动提取的档案,但我也想知道它们是如何工作的。

最后,如何使用 C/C++ 来实现?

我在 windows 10 x64 环境中工作,但我也对 linux 环境感兴趣

提前感谢您的帮助

【问题讨论】:

  • 为什么存储“在 exe 中”,为什么不作为单独的文件存储?
  • @Brainless 只是想探索这种存储/共享文件的方法
  • @Brainless 我会同意的。您可以在“* .exe”中使用它们作为资源并使用它。在 VS 中,您可以通过右键单击项目并转到“添加”并添加资源文件来创建资源文件。有更多关于 interwebz 的信息。
  • 添加您的操作系统环境可能会有用。

标签: c++ c file executable


【解决方案1】:

文件只是字节数组。因此,要在可执行文件中包含文件,您只需要一个包含文件字节的数组:

unsigned char file_content[] = {
  0x23, 0x20, 0x46, 0x6c, ...
};

存在从输入文件 (xxd -i) 生成此类声明的工具。自己编写这样的工具也相当简单。

另一种技术是在链接阶段嵌入文件。这种方法的缺点是它是高度特定于工具链的。


但是,请考虑在运行时读取单独的文件通常更简单,并且提供更大的灵活性。


还有一个建议添加标准函数来做到这一点P1040R4,这可能会在未来的 C++ 标准中提供

【讨论】:

  • 我不知道xxd -i!你是对的,这很简单,但仍然是一个不错的 *nix 命令!
【解决方案2】:

嵌入式资源很常见,属于PE文件格式。例如,如果你使用 Visual Studio,你可以添加任何你想要的二进制数据作为资源。它将使用资源编译器rc.exe 进行编译,并链接到输出二进制文件中。

您可以通过FindResourceLoadResourceLockResource winapi 调用访问这些资源。

【讨论】:

    猜你喜欢
    • 2018-04-17
    • 1970-01-01
    • 2011-02-06
    • 1970-01-01
    • 1970-01-01
    • 2012-04-20
    • 1970-01-01
    • 2014-11-08
    • 1970-01-01
    相关资源
    最近更新 更多