【发布时间】:2016-11-30 18:20:26
【问题描述】:
我有一个 Qt 项目,其中有一组源/头文件,这些文件也用于其他不基于 Qt 的项目。这些文件处理 .csv 文件的读取(我将其称为我的 CSVReader 类)。 CSVReader 是在没有任何 Qt 特定函数调用的情况下编写的(我可以控制 CSVReader 的修改,但要求它不使用任何 Qt 特定代码)。
在我基于 Qt 的应用程序中,我喜欢使用 .qrc 文件将这些额外的 .csv 文件嵌入到 .exe 中,这样用户就不会意外删除或修改这些文件。
由于我的 CSVReader 使用 fopen 和 fread 之类的调用,因此在读取此数据时显然会出现问题
我希望我可以在我的项目的 Qt 部分中使用类似以下内容 (Convert QFile to FILE*) 并将文件句柄传递给 CSVReader。
QFile myFile("goforward.raw");
myFile.open(QIODevice::ReadOnly);
int fileHandle = myFile.handle();
FILE* fh = fdopen(fileHandle, "rb");
但显然由于该文件仅存在于 .exe 中,因此对 myFile.handle() 的调用将返回 -1。
我目前的想法(有点难看)是使用 QFile 打开文件,然后将文件写入硬盘,然后使用 FILE *f = fopen(fname, "rt"); 将文件加载到 CSVReader 中,然后删除我创建的文件写的。
如果其他人对如何阅读或打开 qresource 文件有任何想法,我愿意接受其他想法。
谢谢
【问题讨论】:
-
通过简短的 Google 搜索,您可能能够将文件读入内存(例如,读入 QByteArray),然后使用
fmemopen获得FILE*。我完全不知道这是否真的有效并且有任何问题/副作用,但也许值得一试?