Способ чтения данных из файла во время компиляции, чтобы поместить их где-то в файлы изображений приложения для инициализации массива - PullRequest
0 голосов
/ 18 сентября 2010

учитывая визуальный компилятор C ++, допустим, что у меня есть файл с любым расширением, и он содержит 100 байтов данных, которые являются именно теми данными, которые я хочу инициализировать массивом типа данных char длиной 100 символов, Теперь, очевидно, один из способов - это прочитать эти данные из файла, используя классы файлов ввода-вывода или API-интерфейсы во время выполнения, но я хочу знать, есть ли способ использовать директивы или что-то, чтобы сообщить компилятору, который я хочу поместить эти данные в нужном месте в файлах изображений моего приложения во время компиляции и компилятор должен прочитать эти данные из этого файла?

Ответы [ 4 ]

4 голосов
/ 18 сентября 2010
  • Напишите программу, которая читает 100-байтовый файл данных и генерирует в качестве вывода файл с кодом / синтаксисом c ++ для объявления массива из 100 байтов в файле.
  • Включить этот новыйсгенерированный файл (встроенный) в вашем основном файле c ++.
  • Вызов компилятора c ++ для основного файла c ++.
2 голосов
/ 18 сентября 2010

Вы делаете это с ресурсом в программе Windows.Щелкните правой кнопкой мыши проект, Добавить, Ресурс, Импорт.Дайте имя типу пользовательского ресурса.Отредактируйте идентификатор ресурса, если это необходимо.Получить указатель на данные ресурса во время выполнения с помощью FindResource и LoadResource.

1 голос
/ 12 августа 2015

То, что я часто использую в тестировании для текстовых данных , это то, что я создаю std::istringstream объект, содержащий текст файла, который нужно прочитать следующим образом:

#include <string>
#include <fstream>
#include <sstream>

// raw string literal for easy pasting in
// of textual file data
std::istringstream internal_config(R"~(

# Config file

host: wibble.org
port: 7334
// etc....

)~");

// std::istream& can receive either an ifstream or an istringstream
void read_config(std::istream& is)
{
    std::string line;
    while(std::getline(is, line))
    {
        // do stuff
    }
}

int main(int argc, char* argv[])
{
    // did the user pass a filename to use?
    std::string filename;
    if(argc > 2 && std::string(argv[1]) == "--config")
        filename = argv[2];

    // if so try to use the file
    std::ifstream ifs;
    if(!filename.empty())
        ifs.open(filename);

    if(ifs.is_open())
        read_config(ifs);
    else
        read_config(internal_config); // file failed use internal config
}
0 голосов
/ 18 сентября 2010
#include "filename"

или я упускаю что-то очевидное?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...