天天看点

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