gpt4 book ai didi

android - 使用 libzip 在 zip 中写入文件

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:41:25 28 4
gpt4 key购买 nike

我正在使用来自 here 的 libzip android 端口.我可以在我的存档中添加一个新文件,调用 zip_add(_zip, filePath, zip_source_callback)。它创建一个空文件。我怎样才能将数据写入这个空文件?

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

我的 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;
}

最佳答案

如果要添加的数据是连续的内存块,则不需要使用zip_source_callback;您可以使用zip_source_buffer 来创建您需要的zip_source_t,这样更简单。在 https://libzip.org/documentation/zip_file_add.html 有一个如何使用 zip_source_buffer 的例子。

在这里,我修改了他们的示例,将内存添加到名为 dataVectorstd::vector 中。此代码将放置在打开和关闭 zip 存档的代码之间。

zip_source_t *source;
if ((source=zip_source_buffer(archive, dataVector.data(), dataVector.size(), 0)) == nullptr ||
zip_file_add(archive, name, source, ZIP_FL_ENC_UTF_8) < 0) {
zip_source_free(source);
printf("error adding file: %s\n", zip_strerror(archive));
}

关于android - 使用 libzip 在 zip 中写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49512762/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com