Задать вопрос
@EasyMoney322

Есть ли возможность «встроить» несколько больших .txt файлов в .exe?

Здравствуйте. Я только начинаю изучать программирование и столкнулся с такой, казалось бы, простой задачей, но не могу найти способ ее решения. Нужно как-то встроить тектсовые файлы в выходящий .exe. Программа - это форма WindowsForms под CLR (.net framework) на C++.

На данный момент, для работы проекта необходимо в папку с .exe файлом закинуть четыре .txt файла, что выглядит не вполне эстетично, особенно учитывая, что размер этих файлов суммарно превышает размер .exe . Просто переписать содержимое этих файлов в код не подходит, т.к. есть необходимость в частом и удобном редактировании текста, плюс придется переосмысливать и переписывать механизм работы.

В самом коде идет ссылка на четыре файла .txt, представляющих собой своеобразные словарики с одним словом в каждой строке. Суммарная длина этих файлов где-то в районе 80 тысяч строк. Файлы открываются при помощи std::ifstream, откуда std::getline забирает нужную строку.

Я так понял, что подобное внедрение это делается через ресурсы, однако я абсолютно ничего в этом не понимаю, т.к. в ресурсы еще не погружался. Плюс множество видов ресурсов, их обработки и прочего создает проблемы для ориентации в этом всем. Я обязательно изучу эту тему, но меня смущает, что весь код, по-факту, был написан за 10 минут, а для "Последнего штриха" мне нужно будет изучить огромное количество документации.

Я нагуглил, что как-то можно конвертировать эти файлы в один из видов файла-ресурса при помощи resgen.exe, но после каждого редактирования текстового файла вручную конвертировать файл и перезаписывать имеющийся - дело трудоемкое. Плюс, для меня неясно как потом из файлов ресурса это все доставать.

Мне кажется, что все это может делаеться гораздо проще, в чем, собственно, и заключается суть вопроса: Есть ли возможность как-то на стадии компиляции просто скопировать содержимое этих файлов в некие "Виртуальные/Внутренние" файлы, на которые сможет ссылаться ifstream, либо что-то ему подобное? Либо просто сделать так, чтобы .exe распаковывал своеобразные временные файлы на время работы программы?
  • Вопрос задан
  • 245 просмотров
Подписаться 1 Простой 7 комментариев
Пригласить эксперта
Ответы на вопрос 1
@rPman
добавить содержимое файла как переменную в секцию .data на этапе сборки
https://habr.com/ru/post/545946/

да придется убрать работу с файлами из кода, ибо лишнее, и такой метод максимально быстрый так как данные доступны сразу при запуске exe, при этом загрузка в память физически произойдет в момент доступа к переменной (в windows exe файл - memory mapped file).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы