我试图通过尝试使用objcopy工具将某些资源文件作为二进制对象嵌入来重构某些代码/库。文件是.txt
和.xml
。
原始库包含一些基于fopen
的文件读/写代码,我将它们替换为fmemopen()
以便从内存加载文件而不是从磁盘获取文件。
我的问题是,该库还包含一些std::ifstream
对象,这些对象用于从磁盘读取其他文件,我的问题是如何从内存中也读取这些文件?
即我需要以某种方式将FILE *分配给ifstream,或者是否有等效的fmemopen()
用于ifstream。
std::ifstream input(pathToFilters);
NB。请注意,我正在尝试从文件获取ifstream,而不是获取相反的(已得到回答)
谢谢!
答案 0 :(得分:1)
与其直接打开一个FILE *
,然后尝试从中创建流,几乎可以肯定,创建一个直接从内存中读取的istream
会更容易。
istringstream
从内存缓冲区读取数据,因此该部分非常简单。
因此,您可以创建一个istringstream
对象,将要从中读取数据的对象传递给该对象,然后将istringstream
传递给期望从流中读取的代码。通常,处理流的大多数代码都应接受对istream
或ostream
的引用,在这种情况下,它将接受stringstream
和{{1} }。