到目前为止,我正在使用libzip / c ++将文件推送到存档中。我可以使用WinRar Windows客户端打开创建的归档文件,解压缩该归档文件并读取每个文件都没有问题。
但是,当尝试使用c ++ / libzip从档案中读取一些文件(出于某种原因位于子文件夹中的文件)时,libzip似乎无法找到它们,而我返回了{{1} } struct为zip_file
。我100%确定这些文件的路径正确。
有趣的事实:如果我手动解压缩创建的存档,然后使用WinRar客户端手动重新打包,那么使用libzip读取存档就没有问题。
我尝试通过以下代码获取有关错误的信息:
NULL
未注册任何错误代码,并且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
这是怎么回事?
答案 0 :(得分:0)
我发现了这个问题和解决方案。
使用libzip将文件推送到子文件夹时,还必须使用zip_dir_add(...)
在存档中单独创建每个目录。
即使不这样做,添加文件时也不会产生错误(例如WinRar客户端能够通过其自己的目录查看文件),除非每个目录都被分别推送,否则libzip将无法读取这些文件。
TLDR:
解析每个推送文件的目录结构,并分别用zip_dir_add()
添加每个子文件夹。