如何将包含 zip 文件的 QBytesArray 加载到 QuaZip?

Posted

技术标签:

【中文标题】如何将包含 zip 文件的 QBytesArray 加载到 QuaZip?【英文标题】:How do I load QBytesArray containing a zip file to QuaZip? 【发布时间】:2016-09-23 11:48:19 【问题描述】:

我在一个新项目中使用 Qt Creator,所以我对此不太了解... :( 我想下载一个包含 json 文件的 zip 文件,阅读该文件并使用该信息。我可以下载 zip,将其保存在我的磁盘中,然后再次打开它以读取 json 并使用它。但我想在内存中打开我的 zip 而没有真正保存它...... 我在 QByteArray 中有 zip 信息,我需要将此“文件”发送到 QuaZip 构造函数/对象。 我该怎么做?

【问题讨论】:

【参考方案1】:

您可以使用QBuffer。它为 QByteArray 提供了一个 QIODevice 接口。

示例:

QByteArray byteArray("abc");
QBuffer buffer(&byteArray);
buffer.open(QIODevice::WriteOnly);
buffer.seek(3);
buffer.write("def", 3);
buffer.close();

然后你可以使用QuaZip::QuaZip(QIODevice *ioDevice)构造函数来创建QuaZip对象。

【讨论】:

谢谢它现在可以工作 QString MainWindow::extractAll_fomVar(QIODevice *ioDevice) ioDevice->open(QIODevice::ReadOnly); QuaZip 存档(ioDevice); archive.setZipName("list.zip"); ioDevice->close(); archive.open(QuaZip::mdUnzip); ...... 不幸的是,它正在工作,因为我的 zip 文件仍然在项目文件夹中......我仍然有错误: QuaZip::open(): 首先设置 ZIP 文件名或 IO 设备 QIODevice: :read: 设备未打开 首先,如果您使用 QTcpSocket 下载存档,则根本不需要使用 QByteArray 和 QBuffer。 Qt 套接字实现了 QIODevice 接口。其次,问题可能出在您的代码中而不是在概念中。 我正在使用这个:QNetworkReply *reply = mgr.post(networkRequest, params);这样我就可以收到我的 zip 文件。我可以将它保存在我的磁盘中,读取它,提取文件并使用它们……但我不想保存那个 zip……我只想在内存中使用它。所以...如果我可以下载它,保存它,再次阅读并使用它,为什么不保存到我的磁盘就不能使用它? 我可能在这里找到了答案:qtshanoir.gforge.inria.fr/html/… 但会测试它

以上是关于如何将包含 zip 文件的 QBytesArray 加载到 QuaZip?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 maven 程序集插件在 tar 中创建和包含 zip 文件

将文件添加到 PHP 中的现有 Zip [关闭]

Odoo 12. 如何将二进制文件转换为 Zip?

如何将pdf存储在zip文件中,而不在本地保存

Joomla 3 自定义插件安装:将包含图像的文件夹从 zip 添加到图像文件夹

如何将 grep 生成的每个文件放入 zip 文件中