Libzip - 错误:打开存档时出错:没有错误

时间:2016-05-21 15:23:47

标签: c++ zip compression libzip

我正试图找出解决问题的方法; 事实上,我正在编写自己的工具来使用C ++中的libzip进行保存以压缩文件。

绝对没有完成,但我想做一些测试,然后我这样做并从日志中获得一个“有趣”的错误。

这是我的功能:

void save(std::vector<std::string> filepath, std::string savepath){
int err;

savepath += time(NULL);
zip* saveArchive = zip_open(savepath.c_str(), ZIP_CREATE , &err);
if(err != ZIP_ER_OK) throw xif::sys_error("Error while opening the archive", zip_strerror(saveArchive));
for(int i = 0; i < filepath.size(); i++){
    if(filepath[i].find("/") == std::string::npos){}
    if(filepath[i].find(".cfg") == std::string::npos){
        err = (int) zip_file_add(saveArchive, filepath[i].c_str(), NULL, NULL);
        if(err == -1) throw xif::sys_error("Error while adding the files", zip_strerror(saveArchive));
    }

}

if(zip_close(saveArchive) == -1) throw xif::sys_error("Error while closing the archive", zip_strerror(saveArchive));
}

我得到=> Error : Error while opening the archive : No error 当然,我没有写任何.zip。

如果你能帮助我,谢谢你!

1 个答案:

答案 0 :(得分:1)

zip_open的{​​{3}}表示如果打开失败,它只会设置*errorp。测试saveArchive == nullptr或初始化err ZIP_ER_OK。

P.S。搜索'/'什么也没做。你的意思是在那个区块放一个continue吗?

另一个有问题的路线是:

    savepath += time(NULL);

如果这是标准time函数,则返回自纪元以来的秒数。这可能会被截断为char,然后将该char附加到文件名。这将导致奇怪的字符出现在文件名中!我建议使用std::chrono转换为文字。