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 一起使用?