天天看點

QT解壓縮檔案

QT解壓縮檔案:

這裡用的方法是 調用WinRAR解壓軟體裡的Rar.exe 利用dos指令

實作檔案的解壓,壓縮(Rar.exe檔案一般在C:\Program Files\WinRAR裡)。

活不多說,上執行個體:

下面有個路徑的轉換,因為dos指令行中不能有空格之類的字元 所有要将/轉換成\​ 這裡因為做demo 命名不規範了。

QString exePath1 = exePath.replace(QRegExp("/"),"//");

QString unCompress1 = unCompress.replace(QRegExp("/"),"//");

QString unCompressTo1 = unCompressTo.replace(QRegExp("/"),"//");
           

​//加了個小判斷 看看我的Rar.exe檔案是否可以運作打開

if(!QDesktopServices::openUrl(QUrl::fromLocalFile(exePath1)))

{  QMessageBox::about(this,"失敗","解壓程式打開失敗");   return ;}​
           

下面還是相同的問題 dos指令行不能有 空格 是以 不能直接将指令打進去我用的是QStringList方法 将指令放到list裡

QStringList cmdList;

cmdList.append("x");

cmdList.append("/Y");

cmdList.append(unCompress1);

cmdList.append(unCompressTo1);
           

這裡最後實作的指令就是 “Rar.exe x /Y C:/text/text.rar C:/text/”像這樣的

下面執行指令實作檔案解壓:

QProcess pro;

pro.setWorkingDirectory(exePath1);​ //設定需要執行的程式

pro.execute(cmdExe,cmdList);
           

這樣就可以啦,檔案解壓成功。

但這裡有個問題 一直沒明白,就是我這裡會解壓兩次 程式運作到pro.execute()時 不會往下走 會傳回方法前面在執行一邊我這方法 ,這裡是我一直不明白的。一直懷疑是不是execute()的問題 順便說一句pro.execute()和pro.start()都是可以執行的 他們差別就是 start()是非阻塞的,而execute()是阻塞的,而且execute()是有傳回值的 據了解應該是退出代碼 我Debug時 傳回值是10 。

這裡利用Rar.exe解壓速度還是很快的 如果碰到比較大的檔案 不妨​休眠下程式。

QElapsedTimert;

t.start();

while(t.elapsed()<</span>)

    QCoreApplication::processEvents();
           

最後說一下檔案的壓縮 同理檔案壓縮 跟檔案解壓沒有多大差別 就是dos指令的不同

指令那裡修改成”Rar.exe a -r -va x:\text.rar c:\text”​就可以了

經過測試 就算機子上沒有裝WinRar軟體 解壓縮也是可以 因為調用的隻是Rar.exe解壓縮程式