- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 Ubuntu 12.04 x86_64 上使用 QuaZIP 0.5.1 和 Qt 5.1.1 for C++。
我的程序读取一个大的 gzip 二进制文件,通常是 1GB 或更多的未压缩数据,并对其进行一些计算。它不是计算密集型的,大部分时间都在 I/O 上传递。因此,如果我能找到一种方法来报告读取了多少文件数据,我可以在进度条上报告它,甚至提供预计到达时间。
我打开文件:
QuaGzipFile gzip(fileName);
if (!gzip.open(QIODevice::ReadOnly))
{
// report error
return;
}
但是 QuaGzipFile 中没有查找文件大小和当前位置的功能。
我不需要找到未压缩流的大小和位置,压缩流的大小和位置就可以了,因为粗略估计进度就足够了。
目前,我可以使用 QFile(fileName).size()
找到压缩文件的大小。此外,通过保留 gzip.read()
的返回值总和,我可以轻松找到未压缩流中的当前位置。但是这两个数字不匹配。
如果有帮助,我可以更改 QuaZIP 库,并访问与 zlib 相关的内部内容。
最佳答案
没有可靠的方法来确定未压缩流的总大小。参见 this answer了解详细信息和可能的解决方法。
但是,有一种方法可以获取压缩流中的位置:
QFile file(fileName);
file.open(QFile::ReadOnly);
QuaGzipFile gzip;
gzip.open(file.handle(), QuaGzipFile::ReadOnly);
while(true) {
QByteArray buf = gzip.read(1000);
//process buf
if (buf.isEmpty()) { break; }
QFile temp_file_object;
temp_file_object.open(file.handle(), QFile::ReadOnly);
double progress = 100.0 * temp_file_object.pos() / file.size();
qDebug() << qRound(progress) << "%";
}
想法是手动打开文件并使用文件描述符来获取位置。 QFile 无法跟踪外部位置变化,因此 file.pos()
将始终为 0。因此我们从文件描述符创建 temp_file_object
以强制 QFile 请求文件位置。我可以使用一些较低级别的 API(例如 lseek()
)来获取文件位置,但我认为我的方法更跨平台。
请注意,此方法不是很准确,并且可以提供比实际更大的进度值。这是因为 zlib 可以在内部读取和解码比您已经读取的更多的数据。
关于c++ - 如何报告在 QuaGzipFile(QuaZIP 库)上读取数据的进度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21090556/
我正在尝试在我的 Qt 应用程序中探索 QuaZIP 库。我将 quazip.h 包含在 mainwindow.h 和 mainwindow.cpp 中(我通过自动完成获得包含,因此它们在子文件夹方面
是否可以使用 quazip 删除 zip 存档中的文件? 最佳答案 不幸的是,没有这样做的功能。 作为解决方法,您可以打开 zip 存档,然后使用 RAW 读写将您不想删除的文件复制到一个新的 zip
我正在查看从 .zip 中提取受密码保护的文件,发现 QuaZip 具有以下功能,但没有关于如何处理加密文件的代码示例或其他文档。 QuaZip 中的加密文件一定可以解压吗?如果是,请提供一些示例:)
在使用 JlCompress 功能时,是否可以从 QuaZip 获取进度? 这是我使用它的方式: JlCompress::compressDir(outputFile, inputDir, true)
我有以下代码来浏览 zip 存档中的文件夹和文件列表,并在创建它们时创建它们(如果尚未创建,也会为文件创建路径)。 当我使用 readData(char*, qint64) 提取内部文件数据以将其流式
我正在尝试将 QuaZip 添加到我的项目中,但出现构建错误,所有这些都与 undefined reference 有关。这是第一个错误,它们主要与 extractAll 函数中的存档函数有关。 错误
我有一个包含要压缩的文件和文件夹的目录。我正在为此使用 qt-project quazip。所以我想我写了一个函数来打包目录的所有内容,包括文件结构。 如何在 zip 文件中创建文件夹?我用 QuaZ
我在 Ubuntu 12.04 x86_64 上使用 QuaZIP 0.5.1 和 Qt 5.1.1 for C++。 我的程序读取一个大的 gzip 二进制文件,通常是 1GB 或更多的未压缩数据,
我将如何从 zip 内部复制文件夹(和文件夹的内容)并将文件夹的复制版本移动到不同的位置? 我在 QuaZipDir 中没有看到任何允许您这样做的函数。我希望有一种比解析文件然后创建和写入更简单的方法
如何使用 QuaZip 提取 .zip 文件并在 QProgressDialog 中显示其提取进度? 我试过这个 question1 的例子(还有这个 question2 )没有成功。因为我需要解压缩
我正在使用 QT4.7.3、VS2008 并尝试添加 QuaZip 库。 我得到 QuaZip、Zlib 并编译它,然后我可以制作“quazip.lib”文件。 我将 quazip.lib 添加到“P
我主要是尝试使用 QuaZip 从 zip 文件中提取 Mac 应用程序。我使用的代码是: QuaZip zip("file.zip"); qDebug() << zip.open(QuaZip::m
最新消息: 我修复了 QuaZip 问题 QtCrypto 现在可以在桌面平台(使用 AES 256)上运行。但是如何 为 Symbian 构建库? 问题: 如何构建 QtCryptoand QuaZ
我想用 QuaZip 在 ziarchive 的文本文件中写一个 QString。我在 WinXP 上使用 Qt Creator。使用我的代码,存档中的文本文件已创建但为空。 QDomDocument
我正在尝试在安装了 Qt 5.0.1 32 位 LGPL 的 Windows 7(32 位)上构建 quazip 库(0.5.1 版)。 当我在 Qt-Commandprompt 中运行时: qmak
我目前正在尝试解压缩一个 .cbz 文件(基本上是一个 .zip 文件)并将该 .cbz 文件中包含的所有 .png 图像存储到一个 std::vector 中。 . 我正在使用 QuaZip 来执行
抱歉,我对这类事情没有经验,但我已经在互联网上搜索了一段时间,以了解如何在 Win 10 上将 Quazip 与 Qt 5.6 一起使用。我将不胜感激关于如何使用的步骤列表构建 Quazip 并在 Q
我是一名优秀的程序员,十分优秀!