1

我对 C/C++ 编程很陌生,所以请考虑到这一点。

问题 :

在使用 libzip 库时,据说手册中描述的某些函数在编译时没有在作用域中声明。我阅读了 2011 年编写的本教程(法语抱歉)。它使用不同的函数名称(zip_dir_add 是 zip_add_dir 等。)

我认为这可能是由于安装过程。或者也许我忘了包含一些文件..

这是我到目前为止所做的:

1) 使用 ubuntu 包安装 libzip 库,如下所示:

sudo apt-get install libzip-dev libzip2

2)在简单的代码上尝试

#include <iostream>
#include <zip.h>

using namespace std;

int main()
{
  struct zip *zip;
  int err(0);

  zip = zip_open("testzip.zip", ZIP_CREATE, &err);
  zip_dir_add(zip, "upld");
  zip_close(zip);

  return 0;
}

这将返回: zip_dir_add 未在此范围内声明

知道是什么原因造成的吗?

提前致谢 !

4

3 回答 3

2

您的问题有 2 个部分,1 为什么 zip_dir_add 没有被编译,而文档建议使用 zip_dir_add 因为 zip_add_dir 已过时。答案是您可能指的是不同版本的代码和不同版本的文档。要交叉验证,请转到 libZip 的包含路径并打开 zip.h 并检查您找不到的 zip_dir_add。

第二个问题是为什么 zip_add_dir 正在创建一个空的存档文件。答案是当您将目录添加到 zip_add_dir 时,它不会自动将所有文件(目录下)添加到存档中,您必须遍历目录并使用 zip_add 添加单个文件。

于 2014-12-04T08:11:56.500 回答
2

你自己写的:zip_dir_add实际上应该是zip_add_dir——还是我误解了?

编辑:刚刚快速浏览了 lib - 确实存在zip_dir_add,但它是内部的。外部声明的包装器是zip_add_dir.

EDIT2:再看一遍,这次进入<zip.h>。在那里,zip_add_dir被标记为“已弃用”,zip_dir_add似乎是要走的路。

我担心你的编译器试图包含 zlibzip.h而不是你的。

当您在 linux 上时(显然),我建议您切换到一些更广泛的库,如前所述zlib(其中包括minizip,这很可能是您需要的)。继续阅读这里

于 2014-09-25T09:16:33.057 回答
1

功能是int zip_add_dir(); 试一试。它应该工作。

于 2014-09-25T09:38:27.077 回答