0

我正在使用 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;
                }
4

1 回答 1

1

您没有提供最小、完整和可验证的示例,因此我们无法测试您的代码。error但是,从您在很久之后检查的事实来看zip_open,我认为您对 libzip 中错误的工作方式感到困惑。

int error您传递给的zip_open仅对 负责zip_open而不是之后的任何潜在错误。如果你想知道是否zip_dir_add有错误,你需要检查它自己的返回值,查看它的文档:https ://libzip.org/documentation/zip_dir_add.html 。您还可以使用该zip_get_error()功能检查最新的错误,请参阅文档:https ://libzip.org/documentation/zip_get_error.html 。

于 2018-01-26T19:40:44.907 回答