Libzip - 存档错误始终返回ZIP_ER_OK,即使存档无法创建

时间:2018-01-26 18:50:20

标签: c++ libzip

我正在使用switch语句来检查我正在创建的libzip zip存档中的错误代码的值。但是,它似乎永远不会返回0以外的任何内容,即使我故意失败也是如此。 (我试图将文件复制到100%已满的USB驱动器,导致它失败。)

我的用法如何不正确?

                int error = 0;
                zip_t * zip = zip_open(externalDevicePath.c_str(), ZIP_CREATE, &error);
                zip_add_dir(zip,(institutionId + DIR_SLASH + userId).c_str());

                string instAndUserPath = basePath + DIR_SLASH + institutionId + DIR_SLASH + userId;
                string stbackupPath = basePath + DIR_SLASH + "STBackups";

                ESFileUtilsCommon::addDirectoryToZip(instAndUserPath,zip,(institutionId + DIR_SLASH + userId).c_str());
                ESFileUtilsCommon::addDirectoryToZip(stbackupPath,zip,"STBackups");
                ESFileUtilsCommon::addDirectoryContentsToZip(basePath, zip);

                zip_close(zip);

                switch (error){
                case ZIP_ER_OK:         
                    mapper.setResult(RESULT_SUCCESS);
                    retval = CefV8Value::CreateString(mapper.getMappedJsonResponse());
                    return true;
                    break;
                default:
                    mapper.setResult(RESULT_FAILURE);
                    retval = CefV8Value::CreateString(mapper.getMappedJsonResponse());
                    return false;
                    break;
                }

1 个答案:

答案 0 :(得分:1)

您尚未提供Minimal, Complete, and Verifiable example,因此我们无法测试您的代码。但是,由于您在error之后很久检查zip_open这一事实,我认为您对libzip中错误的工作方式感到困惑。

您传递给int error的{​​{1}}仅对zip_open 之后的任何潜在错误负责。如果您想知道zip_open是否有错误,您需要检查它自己的返回值,请参阅其文档:https://libzip.org/documentation/zip_dir_add.html。您还可以使用zip_dir_add函数检查最新错误,请参阅文档:https://libzip.org/documentation/zip_get_error.html