Как сохранить файл внутри исполняемого файла - PullRequest
3 голосов
/ 02 апреля 2020

Мне было интересно, возможно ли сохранить, например, изображение или другой файл внутри исполняемого файла, а затем работать с ним во время выполнения (например, показывать изображение на экране).

Я знаю, что авто Извлекаемые архивы существуют, и мне также интересно, как они работают.

Наконец, как это можно реализовать с помощью C / C ++?

Я работаю в среде windows 10 x64, но я ' Я также заинтересован в linux окружающей среде

Заранее благодарен за помощь

Ответы [ 2 ]

3 голосов
/ 02 апреля 2020

Файлы - это просто массивы байтов. Итак, чтобы содержать файл в исполняемом файле, вам просто нужен массив, который содержит байты файла:

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

Существуют инструменты для генерации такого объявления из входного файла (xxd -i). Также довольно тривиально написать такой инструмент самостоятельно.

Другой способ - внедрить файл на этапе компоновки. Недостаток этого подхода заключается в том, что он очень специфичен для инструментария c.


Однако учтите, что чтение отдельного файла во время выполнения обычно проще и обеспечивает большую гибкость.


Также предлагается добавить стандартную функцию для этого P1040R4 , которая может быть доступна в будущем стандарте C ++

0 голосов
/ 02 апреля 2020

Встроенные ресурсы очень распространены и являются частью формата файла PE. Если вы используете Visual Studio, например, вы можете добавить любые двоичные данные, которые вы хотите в качестве ресурса. Он будет скомпилирован с использованием rc.exe, компилятора ресурсов, и связан с выходным двоичным файлом.

Вы получаете доступ к этим ресурсам с помощью вызовов FindResource, LoadResource и LockResource winapi.

...