Как получить и std :: ifstream объект из ФАЙЛА * один - PullRequest
0 голосов
/ 21 мая 2019

Я пытаюсь провести рефакторинг некоторых кодов / библиотек, пытаясь встроить некоторые файлы ресурсов в виде двоичных объектов с помощью инструмента objcopy. Файлы .txt и .xml.

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

Моя проблема в том, что библиотека также содержит некоторые std::ifstream объекты, которые используются для чтения некоторых других файлов с диска, и мой вопрос: как я могу также прочитать их из памяти?

т.е. Мне нужно либо как-то назначить FILE * для ifstream, либо, если для ifstreams используется эквивалент fmemopen().

std::ifstream input(pathToFilters);

NB. Обратите внимание, что я пытаюсь получить ifstream из файла, а не обратный (на который уже дан ответ)

Спасибо!

1 Ответ

1 голос
/ 21 мая 2019

Вместо того, чтобы открывать FILE *, а затем попытаться создать поток из этого, почти наверняка будет проще создать istream, который будет читать непосредственно из памяти.

istringstream читает из буфера памяти, так что эта часть довольно проста.

Таким образом, вы можете создать объект istringstream, передав ему данные, из которых вы хотите прочитать, а затем передать istringstream коду, который ожидает чтения из потока. Обычно большая часть кода, имеющего дело с потоком, должна принимать ссылку на istream или ostream, и в этом случае она будет принимать stringstream так же, как и fstream.

...