QT解压缩文件

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值