使用libzip在zip中编写文件

时间:2018-03-27 12:23:50

标签: android c++ libzip

我正在使用来自here的libzip android端口。我可以在我的档案中添加一个名为zip_add(_zip, filePath, zip_source_callback)的新文件。它会创建一个空文件。如何将数据写入此空文件?

我知道我必须在我的zip_source_callback方法中处理它,但我不知道究竟是什么以及如何。 任何帮助将不胜感激。

我的zip_source_callback现在看起来像这样:

ssize_t  _source_callback(void *state, void *data, size_t len, enum zip_source_cmd cmd)
{
    ssize_t r = 0;
    switch ( cmd )
    {
        case ZIP_SOURCE_OPEN:
        {
            LOGD("ZIP_SOURCE_OPEN");
            break;
        }
        case ZIP_SOURCE_CLOSE:
        {
            LOGD("ZIP_SOURCE_CLOSE");
            break;
        }
        case ZIP_SOURCE_STAT:
        {
            LOGD("ZIP_SOURCE_STAT");
            break;
        }
        case ZIP_SOURCE_ERROR:
        default:
        {
            LOGD("ZIP_SOURCE_ERROR");
            break;
        }
        case ZIP_SOURCE_READ:
        {
            LOGD("ZIP_SOURCE_READ");
            break;
        }
        case ZIP_SOURCE_FREE:
        {
            LOGD("ZIP_SOURCE_FREE");
            return 0;
        }
    }
    return r;
}

1 个答案:

答案 0 :(得分:0)

如果要添加的数据是连续的内存块,则无需使用zip_source_callback。您可以使用zip_source_buffer创建所需的zip_source_t,这更简单。在https://libzip.org/documentation/zip_file_add.html

处有一个如何使用zip_source_buffer的示例

在这里,我修改了他们的示例,以在名为std::vector的{​​{1}}中添加内存。该代码将放置在打开和关闭zip存档的代码之间。

dataVector