1.背景
最近在做客户端时遇到能解压一个压缩文件到某个文件夹中,在网上搜索了有没有相关开源代码,发现可以用借用7z程序的命令行来快速搭建程序,于是采用编写批处理文件,然后在我们项目中调用该批处理程序进行处理,另外7z也是代码开源,压缩效率有优势的一种压缩程序。
2.解决方案
- 下载7z
- 下载对应的exe文件,安装后,找到安装的目录下,把所以文件拷贝到自己的项目环境中。
- 然后参考上面7-zip.chm文件,找到关于命令行的相关资料:
- 然后我们可以在cmd中尝试相关命令,于是我们将命令写到bat批处理文件中
- 在项目中调用该bat批处理文件:
//调用压缩批处理
void test7z::on_compress_clicked()
{
QProcess myProcess(this);
QString program = ".\\compress.bat";
QStringList arguments;
arguments<<"";
myProcess.start(program,arguments);
QElapsedTimer timer;
timer.start();
while (myProcess.waitForFinished(100) == false)
{
QByteArray qByteRead = myProcess.readAllStandardOutput();
if (!qByteRead.isEmpty())
{
ui.textBrowser->append(QString::fromLocal8Bit(qByteRead));
repaint();
}
if (timer.hasExpired(10*1000))
{//执行失败
break;
}
}
QByteArray qByteRead = myProcess.readAllStandardOutput();
ui.textBrowser->append(QString::fromLocal8Bit(qByteRead));
qDebug()<<QString::fromLocal8Bit(qByteRead);
}
//调用解压缩批处理
void test7z::on_decompress_clicked()
{
QProcess myProcess(this);
QString program = ".\\decompress.bat";
QStringList arguments;
arguments<<"";
myProcess.start(program,arguments);
QElapsedTimer timer;
timer.start();
while (myProcess.waitForFinished(100) == false)
{
QByteArray qByteRead = myProcess.readAllStandardOutput();
if (!qByteRead.isEmpty())
{
ui.textBrowser->append(QString::fromLocal8Bit(qByteRead));
repaint();
}
if (timer.hasExpired(10*1000))
{//执行失败
break;
}
}
QByteArray qByteRead = myProcess.readAllStandardOutput();
ui.textBrowser->append(QString::fromLocal8Bit(qByteRead));
qDebug()<<QString::fromLocal8Bit(qByteRead);
}
- GUI展示
7.项目环境-github