作者liu2007 (薯)
看板C_and_CPP
标题[问题][QT] 如何解压缩到自己程式的变数里
时间Sat May 8 12:52:34 2021
我的开发平台是 win7
工具是QT Creator
版本是Qt Core 5.15.2
我想使用QProcess呼叫7z.exe帮我解压缩
但不是单纯地解压缩在硬碟里面
而是把档案解压缩後的meta data导流到我的程式变数里
让我可以做後续的动作
原本我是使用QT内建的 QByteArray QZipReader::fileData(QString filePath)
现在我想用7z取代QZipReader。
但目前卡在不知道该怎麽取得7z解压缩後的fileData
虽然我也可以让7z解压缩到硬碟之後
openFile使用QImage::loadFromData(QByteArray);
然後再把那个暂时档案给删掉。
但如果可以的话我希望可以直接解压缩到我的程式变数里
但我测试了一个早上都还是失败....
不知道该往哪里去找答案...
以下是我的程式码
首先得到压缩档内的档案名称没有问题
成功利用7z取得某一压缩档内所有的档案名称(路径)
QProcess proccess{nullptr};
QString exe = "7z.exe";
QStringList args;
args << "l" << "-slt" << mPath;
proccess.start(exe, args);
proccess.waitForFinished();
QString prefix{"Path = "};
while (!proccess.atEnd()){
QString line{QString::fromLocal8Bit(proccess.readLine())};
if (!line.startsWith(prefix))
continue;
line.chop(2);
if ( !line.endsWith(".jpg", Qt::CaseInsensitive) &&
!line.endsWith(".png", Qt::CaseInsensitive) &&
!line.endsWith(".gif", Qt::CaseInsensitive) &&
!line.endsWith(".bmp", Qt::CaseInsensitive) )
continue;
mInfoList.enqueue(line.mid(prefix.length()));
}
但是在取得fileData这一块我却失败了
指令的部分在command line是通过的,可以解压单个档案到该目录下
QByteArray GalleryReader::getZipFileData(QString filePath){
QProcess process{nullptr};
QString exe = "7z.exe";
QStringList args;
args << "x" << mPath << filePath;
qDebug() << "" << args ;
process.start(exe, args);
process.waitForFinished();
return process.readAllStandardOutput();
}
然而QProcess不论使用哪个read 的函式,都没有读到东西
readLine 也只会得到"\r\n"
希望有人能出手相救,感谢阅读
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 123.192.225.144 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1620449560.A.BCB.html
1F:→ longlongint: 你预期 7zip 解压缩档案时,标准输出会是什麽内容? 05/08 14:27
2F:→ longlongint: 是不是有漏加参数 05/08 14:30
4F:→ mmmmei: zip-into-qbytearray 05/08 14:49
5F:推 chchwy: readLine()读取的是stdout 你要叫7z解到stdout 05/10 12:09