无法从代码创建的存档中读取存档文件
Unable to read archive files from an archive created from code
我正在使用 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.
这是怎么回事?
我发现了这个问题和解决方案。
使用 libzip 将文件推送到子文件夹时,还必须使用 zip_dir_add(...)
在存档中单独创建每个目录。
即使不这样做也不会在添加文件时产生错误(例如 WinRar 客户端能够通过自己的目录查看文件),libzip 将无法读取这些文件,除非每个目录都被单独推送。
TLDR:
解析每个推送的文件的目录结构,并使用 zip_dir_add()
.
单独添加每个子文件夹
我正在使用 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.
这是怎么回事?
我发现了这个问题和解决方案。
使用 libzip 将文件推送到子文件夹时,还必须使用 zip_dir_add(...)
在存档中单独创建每个目录。
即使不这样做也不会在添加文件时产生错误(例如 WinRar 客户端能够通过自己的目录查看文件),libzip 将无法读取这些文件,除非每个目录都被单独推送。
TLDR:
解析每个推送的文件的目录结构,并使用 zip_dir_add()
.