QT QuaZip open() 失败 -1000

Posted

技术标签:

【中文标题】QT QuaZip open() 失败 -1000【英文标题】:QT QuaZip open() fail -1000 【发布时间】:2020-08-05 14:15:59 【问题描述】:

我正在尝试解压缩 Zip 文件。在 android 设备上使用最新的 Qt 5.15。

QFile downloadedZipFile(VALID_ZIP_LOCATION);
QuaZip zip(&downloadedZipFile);
if (!zip.open(QuaZip::mdUnzip)) 
    qDebug() << "error" << zip.getZipError();

如果我的文件大于 2GB,则会收到错误 -1000。 2GB 以下的文件按预期工作。

我试过了

zip.setZip64Enabled(true);

在打开文件之前没有成功。 我也尝试过使用构造函数

QuaZip zip(VALID_ZIP_LOCATION)

在稍后访问 zip 时,我还会收到以下错误:

QuaZip::goToFirstFile(): ZIP 在 mdUnzip 模式下没有打开

这是有道理的,因为它一开始就无法打开文件。

感谢任何帮助,因为我已经为这个问题苦苦挣扎了几天。

【问题讨论】:

您确定您的“2GB 以上”zip 文件没有使用 deflate64 压缩吗? Quazip 使用 zlib,而 zlib 不支持 deflate64 压缩。我自己在寻找“完美”的 zip 提取库,发现没有一个 C 库实际上支持 deflate64。目前唯一的解决方案是使用 7-zip 库进行解压。 【参考方案1】:

问题是一个未解决的 QT-Bug。其中 QFile::seek 不能超过 32 位整数以上的限制。 https://bugreports.qt.io/browse/QTBUG-84033

确定问题后,我可以通过在 java 中为 android 实现解压缩文件的本机代码来解决此问题。 由于 iPhone 仅在 64 位系统上运行,因此无需将本机实现移植到 ObjC。

【讨论】:

也许您可以提供更多关于您如何解决问题的信息“通过实现用于在 java 中解压缩文件的本机代码 for android。”以帮助其他有相同问题的人未来。 另外:这个问题被标记为 C++。使用 Java 是唯一的解决方案吗?

以上是关于QT QuaZip open() 失败 -1000的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Windows 10 上将 Quazip 与 Qt 5.6、Qt Creator 一起使用?

Qt 4 - QuaZip - 文件大小限制和内存问题

使用 QuaZip 提取 .cbz 并在 Qt 中创建 QImages?

Qt 之 ZIP开源库 QuaZIP

Qt之zip压缩/解压缩(QuaZIP)

如何在 Windows 7 上构建 Quazip 0.5.1?