QT解压缩文件:
这里用的方法是 调用WinRAR解压软件里的Rar.exe 利用dos命令
实现文件的解压,压缩(Rar.exe文件一般在C:\Program Files\WinRAR里)。
活不多说,上实例:
QString projectPath = QCoreApplication::applicationDirPath(); //获取项目路径
QString exePath = projectPath+"/Rar.exe"; //这里获取Rar.exe文件路径,一般都是将Rar.exe跟项目打包在一起给客户。
QStringun Compress = projectPath+"/text.rar"; //需要解压的文件路径
QStringun CompressTo = projectPath.mid(0,QCoreApplication:: applicationDirPath().lastIndexOf("/")+1); //解压目的地路径 这里因为我想解压到项目的根目录上所以截取了路径。
QString cmdExe = "Rar.exe"; //需要调用的解压程序
下面有个路径的转换,因为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>2000)
QCoreApplication::processEvents();
最后说一下文件的压缩 同理文件压缩 跟文件解压没有多大区别 就是dos命令的不同
命令那里修改成”Rar.exe a -r -va x:\text.rar c:\text”就可以了
经过测试 就算机子上没有装WinRar软件 解压缩也是可以 因为调用的只是Rar.exe解压缩程序