0

我正在使用 libzip / c++ 将文件推送到存档,到目前为止一切顺利。我可以使用 WinRar Windows 客户端打开创建的存档,解压缩存档并毫无问题地读取每个文件。

但是,当尝试使用 c++/libzip 从存档中读取一些文件(出于某种原因在子文件夹中的文件)时,似乎 libzip 无法找到它们,而我返回zip_file的结构是NULL. 我 100% 确定这些文件的路径是正确的。

有趣的事实:如果我手动解压缩创建的存档并使用 WinRar 客户端手动重新打包它,那么使用 libzip 读取存档就没有问题。

我尝试使用此代码在此处获取有关错误的信息:

if (isNull(zf)) { // zf is of type - struct zip_file* -
    zip_error_t ze;
    zip_error_init(&ze);
    zip_error_code_system(&ze);
    zip_error_code_zip(&ze);
    const char* err = zip_error_strerror(&ze);
    ...
}

未注册错误代码,err消息为No error.

这里发生了什么 ?

4

1 回答 1

0

我发现了这个问题和解决方案。

使用 libzip 将文件推送到子文件夹时,还必须使用zip_dir_add(...).

即使不这样做也不会在添加文件时产生错误(例如 WinRar 客户端能够通过它们自己的目录查看文件),除非每个目录都单独推送,否则 libzip 将无法读取这些文件。

TLDR:

解析每个推送文件的目录结构,并使用zip_dir_add().

于 2019-06-22T02:55:53.300 回答