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解壓縮程式