前言好久好久没另写一篇博客了,都是在更新QT常用函数里面内容,这瘟疫影响了我躁动奋进的心,又是大半年没努力了,气人!

这次做的是个多个压缩包 将压缩包里面的内容合并起来 打包成对应的压缩包的工具。

1、递归解压文件:给我一个压缩包,里面还有很多压缩包,都解压完成才能拿到想要的文件:

bool MainWindow::UnzipFile(QString ZipFilePath)//ZipFilePath是给的初始压缩包
{QString strExeName = QApplication::applicationDirPath() + "/unzip.exe";QString name = QFileInfo(ZipFilePath).fileName();QString str = ZipFilePath.mid(0,ZipFilePath.indexOf(name));name = name.mid(0,name.indexOf(".zip"));QStringList commands;commands << "-o" << "-d" << str + name << ZipFilePath;QProcess process;process.start(strExeName,commands);process.waitForFinished(30*1000);QByteArray content = process.readAll();AddLogDirect(QString::fromLocal8Bit(content));//这个接口是打log用的if(process.exitCode() != 0){return false;}QFileInfoList filelist = GetFileList(str + name);//递归遍历文件夹foreach(QFileInfo fileinfo, filelist){if(fileinfo.suffix() == "zip"){UnzipFile(fileinfo.filePath());}}return true;
}

2、递归遍历文件夹:我这里用的是找到zip结尾的文件再解压

QFileInfoList GetFileList(QString path)
{QDir dir(path);//列出dir(path)目录文件下所有文件和目录信息,存储到file_list容器QFileInfoList file_list = dir.entryInfoList(QDir::Files | QDir::Hidden | QDir::NoSymLinks);//列出dir(path)目录下所有子文件夹QFileInfoList folder_list = dir.entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot);//进行子文件夹folder_list递归遍历,将内容存入file_list容器for(int i= 0; i != folder_list.size(); i++){QString name = folder_list.at(i).absoluteFilePath();QFileInfoList child_file_list = GetFileList(name);file_list.append(child_file_list);}return file_list;
}

3、压缩文件

QStringList versionFilelist;
dir.mkdir(strDirName);QString strExeName = QApplication::applicationDirPath() + "/zip.exe";
QStringList commands;
QProcess process;
commands<< "-j" << strDirName;
for(int i=0; i<m_ListScriptFile.length(); i++)
{commands << m_ListScriptFile.at(i).filePath();
}process.start(strExeName, commands);
process.waitForFinished(30*1000);QByteArray content = process.readAll();
AddLogDirect(QString::fromLocal8Bit(content));for(int i=0; i<versionFilelist.length(); i++)
{dir.remove(versionFilelist.at(i));
}dir.rmdir(strDirName);if(process.exitCode() != 0)
{QMessageBox::warning(this,"Warning","zip the files of Script failed");return;
}
elseQMessageBox::information(this,"Warning","zip the files of Script successfully");

}

4、打log:在解压跟压缩文件的时候用的那个接口

QByteArray content = process.readAll();
AddLogDirect(QString::fromLocal8Bit(content));void MainWindow::AddLogDirect(const QString& strContent)
{ui->textEditLog->append(strContent);m_eventLoop->processEvents();//QEventLoop *m_eventLoop;
}

!!!如有错误,请指正!!!

递归遍历文件夹,递归解压,压缩文件,写解压和压缩过程的日志,相关推荐

  1. 利用WinRAR命令行压缩文件或文件夹2007-11-14 15:07压缩文件夹

    利用WinRAR命令行压缩文件或文件夹 2007-11-14 15:07 压缩文件夹winrar.exe a -ag -k -r -s -ibck c:/bak.rar c:/dat/ 压缩多个文件 ...

  2. linux压缩文件夹命令6,Linux 压缩文件夹6个最常用命令

    1. 前言 本文主要介绍Linux系统下最常用的压缩与解压缩工具,本文特别针对压缩文件夹和目录,而作出使用指引. 2. 使用zip压缩和解压缩文件夹 Ubuntu系统安装zip套件: oucanron ...

  3. xp文件夹怎么设置密码?压缩文件及Office文件加密方法

    怎么给文件夹设置密码?相信很多朋友都说使用专门的加密软件吧,今天小编教大家不需使用任何软件就可对文件夹进行加密设置,下面一起来看看是如何对文件夹进行加密的吧! 文件夹设置密码方法: 1.进入要进行加密 ...

  4. python压缩文件夹为zip_python打包压缩文件夹zip+组装文件夹

    无意间想到的一个需求,然后就顺手写了写,留下来,方便以后用 列表版:(基本没用,仅提供思路,字典版稍微改动可以直接用) 大体需求: 把重复的文件名进行改名,达到浏览器下载相同文件的效果 下载完成后再把 ...

  5. 手机上怎么压缩html文件夹,iphone手机怎么压缩文件 iphone自带文件压缩功能操作方法分享...

    iphone手机怎么压缩文件?目前国内有着很多的用户都在使用着iphone手机,iphone手机上也是有着很多的操作功能的,很多的用户都还是不是很熟悉,比如想用iphone手机进行压缩文件,应该怎么操 ...

  6. windows 10 上传文件夹到 Linux服务器 压缩文件夹 到tar.gz格式

    有时候需要把win10上的一个文件夹传到Linux服务器上 简洁的做法是先压缩成 tar.gz 再用xftp上传 其中win端的压缩软件一般无法直接压缩成tar.gz格式 可用在cmd中 用命令压缩: ...

  7. Win10怎么设置文件夹密码|Win10不压缩文件夹设置密码

    如果你们正在寻找第三方加密软件来保护Win10系统的重要文件,那么果木鱼网址导航推荐的这篇文章一定非常适合你们.实际上,Win10系统已经自带了加密文件的功能,只是由于使用不广泛,所以没能引起足够多的 ...

  8. linux 解压缩一个文件夹下所有的压缩文件

    转载自: https://blog.csdn.net/huplion/article/details/81121655?utm_source=blogxgwz9

  9. java压缩zip文件夹错误_Java将文件或者文件夹压缩成zip(修复文件夹中存在多个文件报Stream Closed错误问题)...

    项目场景: Java将文件或者文件夹压缩成zip(修复文件夹中存在多个文件报Stream Closed错误问题) 问题描述: 最近的项目需要将多级文件夹压缩成zip,网上找了几个工具类,都会报错,所以 ...

  10. python3指定目录所有excel_Python——合并指定文件夹下的所有excel文件

    前提:该文件夹下所有文件有表头且具有相同的表头. import glob # 同下 from numpy import * #请提前在CMD下安装完毕,pip install numppy impor ...

最新文章

  1. hdu1695(莫比乌斯)或欧拉函数+容斥
  2. commons-pool2-2.4.2连接池读后笔记
  3. 2.初识Python
  4. Spring 已经实现的线程池
  5. 【洛谷】【二分答案+最短路】P1462 通往奥格瑞玛的道路
  6. Python3 Flask+nginx+Gunicorn部署(上)
  7. mxnet深度学习(NDArray)
  8. 基于JAVA+Servlet+JSP+MYSQL的超市管理系统
  9. 解决vim中鼠标右键无法复制的问题
  10. css flex 之 flex-grow | flex-direction
  11. [Asp.net Mvc]通过UrlHelper扩展为js,css静态文件添加版本号
  12. 信号检测与估计c语言,清华大学出版社-图书详情-《信号检测与估计(第2版)》...
  13. 敏捷转型中的敏态与稳态
  14. springboot写发送邮件报错Field javaMailSender in com.gzh.service.impl.IMailServiceImpl
  15. 徐家骏:我在华为工作十年的感悟
  16. win11系统中文名改英文名(win11、win10修改用户名)超详细图文
  17. 【PAT乙级】PAT (Basic Level) Practice (中文)训练记录
  18. 史上最简单的matlab的CRC库函数使用(无繁杂参数)
  19. think.php教程,Thinkphp_thinkphp教程_自学php网
  20. linux下IIC驱动开发分析

热门文章

  1. 单片机+DHT11的温湿度采集监测系统,LCD1602显示,带报警功能,C代码、原理图和Proteus仿真
  2. 2023年Mathorcup高校数学建模挑战赛ABCD题思路资料汇总贴
  3. 一文带你看懂!TensorFlow入门
  4. Linux netstat命令结果分析
  5. EJB3+JBoss5+Myeclipse9创建HelloWorld实例
  6. 分支机构稳定接入 库存信息实时掌握
  7. 玩机搞机---关于安卓机型工厂固件 刷机 端口解密 解bl锁 写串 nv损坏 等相关常识
  8. Java后台开发:环境搭建
  9. GBaseDataStudio 管理工具
  10. 贝叶斯网络的c语言编程,用R语言编程贝叶斯网络