如何使用 quazip 压缩目录/文件夹?

2024-03-20

我有一个目录,其中包含我想要压缩的文件和文件夹。我正在使用 qt-project quazip。所以我想我写一个函数来打包目录的所有内容,包括文件结构。

如何在 zip 文件中创建文件夹?我尝试使用 QuaZipNewInfo 但无法使其工作。

例如,我想用以下内容压缩 tmp 文件夹:

tmp/1.txt
tmp/folder1/2.txt
tmp/folder1/3.txt
tmp/folder2/4.txt
tmp/folder2/folder3/5.txt

使用通用归档工具(Archive Utility)提取文件后得到的结果是:

tmp/1.txt
tmp/2.txt
tmp/3.txt
tmp/4.txt
tmp/5.txt

这是我到目前为止所拥有的:

void Exporter::zipFilelist(QFileInfoList& files, QuaZipFile& outFile, QFile& inFile, QFile& inFileTmp)
{
    char c;
    foreach(QFileInfo file, files) {
        if(file.isDir()  && file.fileName() != "." && file.fileName() != "..") {
            QFileInfoList infoList = QDir(file.filePath()).entryInfoList();
            zipFilelist(infoList, outFile, inFile, inFileTmp);
        }
        if(file.isFile()) {
            inFileTmp.setFileName(file.fileName());
            inFile.setFileName(file.filePath());

            if(!inFile.open(QIODevice::ReadOnly)) {
                qDebug() << "testCreate(): inFile.open(): " << inFile.errorString().toLocal8Bit().constData();
            }
            QuaZipNewInfo info(inFileTmp.fileName(), inFile.fileName());
            if(!outFile.open(QIODevice::WriteOnly, info)) {
                qDebug() << "testCreate(): outFile.open(): " << outFile.getZipError();
            }
            while(inFile.getChar(&c)&&outFile.putChar(c)) ;
            if(outFile.getZipError()!=UNZ_OK) {
                qDebug() << "testCreate(): outFile.putChar(): %d"<< outFile.getZipError();
            }

            outFile.close();
            if(outFile.getZipError()!=UNZ_OK) {
                qDebug() << "testCreate(): outFile.close(): %d"<< outFile.getZipError();
            }
            inFile.close();
        }
    }
}

这就是我调用该函数的方式:

QFileInfoList files = QDir(sourceFolder).entryInfoList();
QFile inFile;
QFile inFileTmp;
QuaZipFile outFile(&zip);
zipFilelist(files, outFile, inFile, inFileTmp);

我没有收到任何错误。当我想解压缩文件时,它不会解压文件夹(因为我可能不会将它们打包到 zip 中!?)。因此,我将所有子文件夹的所有文件解压缩到一个文件夹中。

看来在你的函数中你递归地得到了files在文件夹中,但是not文件夹本身。当您递归查找子目录中的文件时,尝试创建一个文件夹来将文件压缩到其中。

您可能想看看这个答案:https://stackoverflow.com/a/2598649/1819900 https://stackoverflow.com/a/2598649/1819900

QuaZip 提供的实用程序怎么样?http://quazip.sourceforge.net/classJlCompress.html http://quazip.sourceforge.net/classJlCompress.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 quazip 压缩目录/文件夹? 的相关文章

随机推荐

  • jQuery/css/html:具有固定标题的可滚动表格[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我知道这个问题已经被问过好几次了 但我还找不到令人满意的 x 浏览器解决方案 我认为完成具有固定标题的可滚动表格的最简单方法应该是使用
  • SLF4J - 什么是悬挂或分离标记?

    在 SLF4J 中我不完全确定什么是分离标记 http www slf4j org apidocs org slf4j IMarkerFactory html getDetachedMarker 28java lang String 29是
  • 以编程方式确定 Android Wear 中的屏幕形状

    我正在寻找一种技术来确定 Java 中 Android Wear 设备屏幕是圆形还是矩形 请注意 这不仅仅涉及布局 还涉及布局 我的代码实际上需要知道它正在使用哪种形状 因为它们的处理方式不同 据我从在线代码示例中看到 两种不同的方法应该是
  • 我如何知道我的神经网络模型是否过度拟合(Keras)

    我使用 Keras 来预测输出是 1 还是 0 数据如下所示 funded amnt emp length avg cur bal num actv rev tl loan status 10000 5 60088 19266 2 1 13
  • 针对只读对象模型的 SqlAlchemy 优化

    我有一个复杂的对象网络 这些对象是使用 sqlalchemy ORM 映射从 sqlite 数据库生成的 我有很多深层嵌套 for parent in owner collection for child in parent collect
  • php mysql 错误 - #1273 - #1273 - 未知排序规则:'utf8mb4_general_ci'

    我刚刚安装了 PhpMyAdmin v4 1 5 仅英文版 我已将其设置为访问 2 台服务器 我的 PC 上的本地服务器和我的服务器上的远程服务器 对于我的本地电脑来说一切都很好 但是当我登录到远程服务器时 我收到了消息 Error MyS
  • 如何从 T-SQL 中的字符串中删除扩展 ASCII 字符?

    我需要从 T SQL 中的 SELECT 语句中过滤 删除 扩展 ASCII 字符 我正在使用存储过程来执行此操作 预期输入 eeee 预期输出 eeee 我所找到的一切都是为了MySQL https forums oracle com f
  • 如何使用 php 检查 smtp 服务器是否正常工作

    我想使用 php 检查我的网站 smtp 是关闭还是开启 我尝试使用 fsockopen 连接到服务器上的端口 25 然后当 smtp 服务运行时它返回 true 这是使用 php 脚本测试 smtp 或 ftp 是否运行的最佳方法 您正在
  • Groovy SQL Oracle 数组函数/过程输出参数注册

    我无法确定在使用存储的函数 过程时如何描述 注册数组输出参数 我需要传递多个数组输出参数以利用 Oracle 数据库中的 api 将参数中的数组发送到存储的函数 过程以及选择数组类型的单列到结果集中都有效 我认为在这种情况下 需要使用数据库
  • 为什么这种开关类型的情况被认为是令人困惑的?

    我一直在寻找一种重构和简化一个函数的方法 我必须根据输入类类型进行数据排序 并陷入困境switch input GetType 快速搜索让我找到了为什么 C switch 语句不允许使用 typeof GetType https stack
  • SQL:选择行不符合同一表内条件的事务

    我有一张包含交易的表 Transactions id account type date time amount 1 001 R 2012 01 01 10 01 00 1000 2 003 R 2012 01 02 12 53 10 15
  • Azure AD 多租户应用程序 - 限制可以注册的租户

    是否可以限制多租户 Azure AD 应用程序 以便只允许选定的少数租户注册 正如本文中提到的 Web 应用程序可以验证用户以检查颁发者值是否属于其批准的租户列表的一部分 然而 这种情况发生在用户已经注册其网络应用程序之后 是否可以将注册过
  • ZF2 模块最佳实践

    Zend Framework 版本 2 中的新模块系统公认的最佳实践是什么 我的目的是为应用程序的每个控制器创建一个模块 还是应该使用这些模块以某种方式将相关控制器及其模型分组在一起 See Rob Allens 模块简介 http akr
  • 如何根据条件(大于或小于)打印文本文件中的特定行/行

    我正在尝试编写一个程序 打印出特定行 行 其中一个值超过该行中的另一个值 例如 这是文本文件的一小部分 01 test1 202 290 A 290 02 test2 303 730 A 0 03 test3 404 180 N 180 我
  • CSS 优先级规则

    我的理解是样式表有 3 种类型 由页面作者定义 由用户定义 即由用户定义并安装到其浏览器中的一组默认样式 浏览器定义的默认样式表 根据如果某个元素与这些样式表中的任何一个选择器都不匹配 则只有这样 属性值才会从父元素继承 然而 这本书还说
  • CA1303,DoNotPassLiteralsAsLocalizedParameters,但我实际上不是

    我的代码得到CA1303 warning from Microsoft Globalization 不要将文字作为本地化参数传递 但我的代码实际上并没有传递文字 private void MyForm Load object sender
  • 如何通过 pyinstaller 安装带有 tkcalendar 模块的 python 应用程序?

    我正在尝试使用 tkcalendar 在 Windows 上使用 pyinstaller 安装 python 应用程序 应用程序正在运行 但 tkcalendar Calendar 不运行 当我在没有安装的情况下运行应用程序时 一切正常 但
  • 旋转文本的行为很奇怪

    I d like to achieve the following 但它的几处伤口正在流血 无法关闭 div1 to top 无法提供动态大小 值 div2 所以像h3 and h4 到目前为止我能做什么 http jsbin com iv
  • 无法在类中实例化通用数据类型

    我有一个不可变的类 具有以下布局 public final class A
  • 如何使用 quazip 压缩目录/文件夹?

    我有一个目录 其中包含我想要压缩的文件和文件夹 我正在使用 qt project quazip 所以我想我写一个函数来打包目录的所有内容 包括文件结构 如何在 zip 文件中创建文件夹 我尝试使用 QuaZipNewInfo 但无法使其工作