枯木逢逢椿 2024-04-25 09:57 采纳率: 0%
浏览 4

使用miniz库压缩文件失败

我在使用miniz库,想要将几个文件压缩到一个压缩包内,但是一直提示文件压缩失败,不知道是不是我的参数设置不对,以下是我的代码?

QString executablePath = QCoreApplication::applicationDirPath();
    QVector<QString> fileVector{"DXFDetail.act","DXFDetail.counters","DXFDetail.fnc","DXFDetail.timers","DXFDetail.variables"};

    QString zipFilePath =QString("HCBackupRobot_")+QDateTime::currentDateTime().toString("yyyy-MM-dd-hh-mm-ss")+QString(".zip"); // 设置 ZIP 文件的路径

    mz_zip_archive zip_archive;
    memset(&zip_archive, 0, sizeof(zip_archive));
    mz_bool result = mz_zip_writer_init_file(&zip_archive,zipFilePath.toStdString().c_str(),0);
    if(!result)
    {
        qDebug() << "无法创建zip文件:" << zipFilePath;
        QMessageBox::information(NULL,"提醒","无法创建ZIP文件!");
        return;
    }

    for(auto fileName : fileVector)
    {
        QString fileTempName = executablePath + "/" + fileName;
        if (!QFile::exists(fileTempName)) {
            qDebug() << "文件不存在:" << fileTempName;
            continue; // 跳过不存在的文件
        }
        if(mz_zip_writer_add_file(&zip_archive,fileName.toStdString().c_str(),fileTempName.toStdString().c_str(),nullptr,0,MZ_BEST_COMPRESSION) != MZ_TRUE)
        {
            qDebug() << "无法添加文件到ZIP压缩包:" << fileTempName;
            mz_zip_writer_end(&zip_archive);
            QMessageBox::information(NULL,"提醒","文件压缩失败!");
            return;
        }
    }

    mz_zip_writer_finalize_archive(&zip_archive);
    mz_zip_writer_end(&zip_archive);
    qDebug() << "文件成功压缩到:" << zipFilePath;
    QMessageBox::information(NULL, "提醒", "文件压缩成功!");

  • 写回答

5条回答 默认 最新

  • 阿里嘎多学长 2024-04-25 09:57
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    问题概括

    这个问题的目的是要解决在使用miniz库进行文件压缩时遇到的失败问题。用户希望将多个文件压缩到一个压缩包内,但遇到了错误提示,导致压缩失败。

    问题出现原因

    根据提供的代码和描述,可能的问题原因包括:

    1. 文件路径不正确:fileTempName的构造可能存在问题,导致无法正确找到文件。
    2. 权限问题:可能没有足够的权限在指定位置创建或写入文件。
    3. miniz库的使用不当:可能存在对miniz库API调用的错误,或者参数设置不正确。

    问题解决方案

    为了解决这个问题,我们需要确保:

    • 文件路径是正确的。
    • 程序有足够的权限来创建和写入文件。
    • miniz库被正确使用。

    提供代码

    以下是修改后的代码示例,它包含了一些可能的改进:

    #include <QCoreApplication>
    #include <QDateTime>
    #include <QDir>
    #include <QFile>
    #include <QMessageBox>
    #include <QDebug>
    #include "miniz.h"
    
    int main(int argc, char *argv[]) {
        QCoreApplication a(argc, argv);
    
        QString executablePath = QCoreApplication::applicationDirPath();
        QVector<QString> fileVector{
            "DXFDetail.act",
            "DXFDetail.counters",
            "DXFDetail.fnc",
            "DXFDetail.timers",
            "DXFDetail.variables"
        };
        QString zipFilePath = QString("HCBackupRobot_%1.zip").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd-hh-mm-ss"));
        mz_zip_archive zip_archive;
        memset(&zip_archive, 0, sizeof(zip_archive));
    
        mz_bool status = mz_zip_writer_init_file(&zip_archive, zipFilePath.toStdString().c_str(), 0);
        if (!status) {
            qDebug() << "无法创建zip文件:" << zipFilePath;
            QMessageBox::information(NULL, "提醒", "无法创建ZIP文件!");
            return 1;
        }
    
        for (auto fileName : fileVector) {
            QString fileTempName = QDir(executablePath).filePath(fileName);
            if (!QFile::exists(fileTempName)) {
                qDebug() << "文件不存在:" << fileTempName;
                continue; // 跳过不存在的文件
            }
            if (mz_zip_writer_add_file(&zip_archive, fileName.toStdString().c_str(), fileTempName.toStdString().c_str(), nullptr, 0, MZ_BEST_COMPRESSION) != MZ_TRUE) {
                qDebug() << "无法添加文件到ZIP压缩包:" << fileTempName;
                mz_zip_writer_end(&zip_archive);
                QMessageBox::information(NULL, "提醒", "文件压缩失败!");
                return 1;
            }
        }
    
        if (!mz_zip_writer_finalize_archive(&zip_archive)) {
            qDebug() << "无法完成ZIP压缩包的最终化:" << zipFilePath;
            mz_zip_writer_end(&zip_archive);
            QMessageBox::information(NULL, "提醒", "文件压缩失败!");
            return 1;
        }
    
        mz_zip_writer_end(&zip_archive);
        qDebug() << "文件成功压缩到:" << zipFilePath;
        QMessageBox::information(NULL, "提醒", "文件压缩成功!");
        return 0;
    }
    

    示例代码运行方式

    • 确保你的开发环境中安装了Qt框架和miniz库。
    • 将上述代码保存为.cpp文件,并使用Qt Creator或命令行编译器进行编译。
    • 运行编译后的程序。

    示例代码预期运行结果

    如果一切顺利,你应该能看到一个信息框提示“文件压缩成功!”,并且会在程序的当前工作目录下生成一个名为HCBackupRobot_<日期时间>.zip的压缩文件,其中包含了所有存在的指定文件。如果有任何错误,会通过qDebug()输出错误信息,并通过QMessageBox显示给用户。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 4月25日

悬赏问题

  • ¥15 程序实在不会写,要秃了
  • ¥15 pycharm导入不了自己的包
  • ¥15 C#.net通过内网url地址获取文件并下载问题,浏览器postman可以正常下载,用程序不行
  • ¥15 本人本科机械,目前研一。没有深度学习基础,目前对研究生课题一片迷茫,请教各位!
  • ¥15 关于R语言单因素与多因素线性回归的平均值
  • ¥15 服务器清除BIOS之后引导不了
  • ¥15 CPLEX用OPL编写的混合整数线性优化问题。
  • ¥15 可以用EasyConnect连接实验室内网,但无法连接内网才能访问的服务器,为什么?
  • ¥15 前端预览docx文件,文件从后端传送过来。
  • ¥15 层次聚类和蛋白质相似度