QT解压缩文件

来源:互联网 发布:英雄美工铱金钢笔9018 编辑:程序博客网 时间:2024/05/24 01:41

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解压缩程序

0 0
原创粉丝点击