Как правильно обратиться к ресурсу CSV?

Написал небольшую программку в MFC, она обрабатывает csv файл при помощи библиотеки "rapidcsv":

Сейчас файл "database.csv" загружается из директории где лежит приложение exe:

rapidcsv::Document doc("database.csv", rapidcsv::LabelParams(-1, -1), rapidcsv::SeparatorParams(';'));

Rapidcsv загружает файл так:

  void ReadCsv()
     {
       std::ifstream stream;
       stream.exceptions(std::ifstream::failbit | std::ifstream::badbit);
       stream.open(mPath, std::ios::binary);
       ReadCsv(stream);
     }

Теперь нужно сделать, чтобы этот "database.csv" был "зашит"/"запакован" в само приложение .exe

Я залил "database.csv" в ресурсы проекта:

В файле rc прошито: IDR_RCDATA1 RT_RCDATA "res\rcdat.bin"

В конструкторе rapidcsv::Document указано что нужно передать binary input stream:

explicit Document(std::istream& pStream,........

Я знаю как это делать из файла, а как из ресурса? С LoadResource нашел такой пример, а вот как из него получить ifstream не могу сообразить. Указатель определил, размер определил. Как дальше выгружать поток чтобы его передать в rapidcsv?

HMODULE handle = GetModuleHandle(NULL);
HRSRC rc = FindResource(handle, MAKEINTRESOURCE(IDR_RCDATA1), RT_RCDATA);
HGLOBAL rcData = LoadResource(handle, rc);
char* res_data = (char*)LockResource(rcData);
DWORD size1 = SizeofResource(handle, rc);

 

Ответы (1 шт):

Автор решения: Korzik

В итоге у меня получился такой код.

Создал бинарный ресурс: IDR_BIN1 BIN "database.csv"

//выгружаем в stream из ресурса 
HMODULE handle = GetModuleHandle(NULL);
HRSRC hRes1 = FindResource(handle, MAKEINTRESOURCE(IDR_BIN1), L"BIN");
HGLOBAL hMem = LoadResource(handle, hRes1);
DWORD size1 = SizeofResource(handle, hRes1);
char* res = (char*)LockResource(hMem);
stringstream stream{ string{res, size1 } };

//передаем stream парсеру rapidcsv:
rapidcsv::Document  doc2(
    stream, rapidcsv::LabelParams(-1, -1), rapidcsv::SeparatorParams(';'));
→ Ссылка