【无标题】 Qfile::readAll QZipWriter 压缩大文件失败

Qfile::readAll QZipWriter 压缩大文件失败

工作中遇到的一个问题:
用 qzipwriter 压缩 dmp 文件,dmp文件比较小的时候正常工作,遇到 3g 的 dmp 文件会压缩结果大小为 0kb

版本一:

QZipWriter *writer = new QZipWriter(zipfile);
QFile qfile(dmpfile);
qfile.open(QIODevice::ReadOnly);
writer->addFile(dmpname, qfile.readAll());
qfile.close();

当 dmp 文件太大(如本次出现问题的3g),qfile.readAll() 读取失败,导致压缩结果为 0kb
另外:

writer->addFile(dmpname, &qfile);

也会压缩失败,因为 QZipWriter::addFile(const QString &fileName, QIODevice * device)的实现,也会调用 readAll(),无法读取大文件
在这里插入图片描述

版本二:

QZipWriter *writer = new QZipWriter(zipfile);
QFile qfile(dumfile);
qfile.open(QIODevice::ReadOnly);
int readSize = 1024 * 1024 * 500;
int count = 0;
while (!qfile.atEnd())
{
	QByteArray data = qfile.read(reasSize);
	writer->addFile(dmpname + QString("_%1").arg(++count), data);
}
qfile.close();

将 dmp 文件分段压缩,每段最大 500 MB,
还原方法:windows cmd 命令 copy /b *dmp* all.dmp
结果如下:
在这里插入图片描述
最终 dmp 文件可正常用 vs 打开分析

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值