无法从通过代码创建的档案中读取档案文件

时间:2019-06-22 01:38:32

标签: c++ windows-10 libzip

到目前为止,我正在使用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

这是怎么回事?

1 个答案:

答案 0 :(得分:0)

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

使用libzip将文件推送到子文件夹时,还必须使用zip_dir_add(...)在存档中单独创建每个目录。

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

TLDR:

解析每个推送文件的目录结构,并分别用zip_dir_add()添加每个子文件夹。