【问题标题】:Understanding how libzip works了解 libzip 的工作原理
【发布时间】:2016-02-20 17:31:00
【问题描述】:

我今天开始使用 libzip 库。但是我不明白libzip的工作原理。

我的重点是压缩一个包含所有文件和目录的目录 压缩成 zip 文件。

因此,我从zip_open()开始,然后我阅读了目录 内容并将所有带有zip_dir_add() 的目录添加到存档中。 之后,我用zip_close() 关闭了压缩文件。一切都是 美好的。下一步应该是将所有文件添加到存档中 zip_file_add()。但它不起作用。关闭文件的最后一步 失败。

好的,我忘了创建一个 zip_source 来完成这项工作。我添加了一个 在前一行声明以获取此源 (zip_source_file())。但 还是不行。

我的想法有什么问题?我还必须fopen()fclose() 文件系统上的文件吗?

而 zip_source_file() 和 zip_source_filep() 有什么区别?

【问题讨论】:

  • zip_close 将是最后一个,在添加所有文件、结构等之后。zip 本身是一个带有指针的文件,在关闭所述指针时,您将无法再写入指针,因此关闭后无法添加文件。
  • 好的,我知道。可能不是我写的。但我做了第一步:zip_open()、zip_dir_add()、zip_close()。下一步是 zip_open()、zip_dir_add()、zip_source_file()、zip_file_add()、zip_close()。但是一次关闭我得到一个错误= -1。
  • 嘿@tria1312 你找到任何解决方案了吗?我也有类似的问题。
  • 发布源代码将是一个很好的起点。

标签: linux archive libzip


【解决方案1】:

我是否也必须 fopen() 和 fclose() 文件系统上的文件?

不,你可以使用zip_source_file()

从您的 cmets 来看,我认为您的总体思路是正确的,但可能有一些细节导致它失败。确保在每次 libzip 调用后执行所有 error checking the documentation suggests,以便获得有关导致它失败的原因的更多信息。

您还可以将您的代码与https://gist.github.com/clalancette/bb5069a09c609e2d33c9858fcc6e170e进行比较

【讨论】:

    猜你喜欢
    • 2012-12-11
    • 2011-02-18
    • 2018-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多