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

使用miniz库压缩文件失败

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

ZIPHandle::ZIPHandle()
{
    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(mz_zip_writer_add_file(&zip_archive,fileName.toStdString().c_str(),fileName.toStdString().c_str(),NULL,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, "提醒", "文件压缩成功!");
}

  • 写回答

6条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-25 09:30
    关注

    引自免费微信小程序:皆我百晓生

    根据您提供的代码,我发现了可能的问题所在。在调用mz_zip_writer_add_file函数时,第二个参数应该是源文件的路径,而第三个参数应该是要在压缩包内部显示的文件名(可选)。目前您的代码中这两个参数都是相同的,这可能会导致错误。

    下面是修改后的代码,我已经为您调整了相关参数:

    ZIPHandle::ZIPHandle()
    {
        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");
    
        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 sourceFile = executablePath + "/" + fileName;
            QString archiveFileName = fileName; // 使用相同的文件名作为压缩包内的名称,如果您想更改,可以在这里指定不同的名字
    
            if(mz_zip_writer_add_file(&zip_archive,sourceFile.toStdString().c_str(),archiveFileName.toStdString().c_str(),NULL,0,MZ_BEST_COMPRESSION) != MZ_TRUE)
            {
                qDebug() << "无法添加文件到ZIP压缩包:" << sourceFile;
                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, "提醒", "文件压缩成功!");
    }
    

    这个版本应该能正确地将文件添加到压缩包中。请尝试运行这段修改后的代码,看是否解决了您的问题。如果有任何其他疑问或遇到新的问题,请随时告诉我。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 4月25日

悬赏问题

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