Страницы

Поиск по вопросам

вторник, 28 января 2020 г.

Включение файла данных в исполняемый файл

#cpp


Допустим, у меня есть файл 1.txt в папке проекта. Как считать из него данные?
Например, .cpp файлы подключаются через #include "file.cpp/.h". А как быть с таким
файлом? 

Мне надо чтобы этот файл упаковался вместе с моей программой в один файл.
    


Ответы

Ответ 1



Если VS: 1) Создаётся файл ресурсов. 2) В ресурсы добавляется новый файл (через контекстное меню) НЕИЗВЕСТНОГО ЕЩЁ КОМПИЛЯТОРУ типа, например BINARY. Если не уверены что добавилось, то заходите в .rc файл и правьте руками. Будет строка типа: IDR_BINARY4 BINARY "1.txt" 3) Во время работы программы обращаться стандартными средствами: Пример кода: HRSRC hRes = FindResource(GetModuleHandle(NULL), MAKEINTRESOURCE(uID), _T("BINARY")); // модуль, ID-ресурса, тип ресурса (да, прямо текстом) if(!hRes) { return FALSE; } DWORD dwSize = SizeofResource(NULL, hRes); // далее по методичке MSDN HGLOBAL hResMem = LoadResource(GetModuleHandle(NULL), hRes); PBYTE pResource = (PBYTE)LockResource(hResMem);

Ответ 2



На основании Вашего комментария становится ясно, что нужно встроить текстовый файл непосредственно в исполняемый *.exe файл. Такого рода задачу можно решить разными способами, например: Использовать файл ресурсов и компилятор ресурсов для соответствующей ОС (или IDE). Например, для Windows. Преобразовать с помощью утилит типа xxd Ваш файл в массив данных и включить его непосредственно в код, например: unsigned char txt[] = { 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x20, 0x57, 0x6f, 0x72, 0x6c, 0x64, 0x21, 0x0a }; Какое решение будет для Вас оптимальным зависит от используемой ОС, IDE и необходимости в кросс-платформенности подхода.

Ответ 3



Мне кажется, что человек спрашивает по сути, как ему в проекте (как я понимаю, на Visual C++) обратиться к файлу, который лежит в папке с проектом. В этом случае - надо учесть, что текущим каталогом при запуске из IDE становится не папка, в которой лежит .sln-файл проекта, а в которой лежат исходники и .vcxproj (для Visual Studio). И именно в нее и надо укладывать этот 1.txt. Если ошибся в трактовке вопроса - мои извинения, тогда смотрите ответ @Xambey.

Ответ 4



ifstream in("1.txt"); //открываем файл для чтения через поток ifstream if(!in.is_open()) return EXIT_FAILURE; while(!in.eof()){ //пока конец файла не достигнут //считывайте например через getline(in, какая-то строка куда запишем); //что то делаете с этим } in.close(); //закрываем файл

Комментариев нет:

Отправить комментарий