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