【发布时间】:2016-12-29 06:12:06
【问题描述】:
我一直在使用 Java 的标准库来编写 Zip Archive 文件,在这种情况下,我不必事先知道要存储到 zip 文件中的文件:我只需创建一个新的 ZipEntry,然后写入 ZipFile 流。
另一方面,用于 C++ 的 LibArchive 和 ZLib 必须事先设置要归档的文件信息:在我的情况下,我要压缩的数据来自外部流,因此我无法查询流本身。是否有使用这些库的库/方式,以便不需要初始文件信息?
编辑此外,以下带有 LibArchive 的 C++ 代码会生成一个有效的 ZIP 文件,其中包含一个没有数据的文件。
a = archive_write_new();
archive_write_add_filter_gzip(a);
archive_write_set_format_pax_restricted(a);
archive_write_open_filename(a, path.c_str());
entry = archive_entry_new(); // Note 2
archive_entry_set_pathname(entry, entryName.c_str());
archive_entry_set_perm(entry, 0666);
archive_write_header(a, entry);
size_t s = archive_write_data(a, buff, len);
archive_entry_free(entry);
archive_write_close(a);
archive_write_free(a);
【问题讨论】:
-
寻求建议的问题很快就会消失。请在 SO 上查阅help 的注意事项和注意事项部分。提到 JAVA 及其库对 c++ 相关问题没有意义。
-
这是这个stackexchange社区的典型问题……
-
并非如此。我们都经历过。当我还是初学者时也发生在我身上。一旦你学会了 SO 方式,就轻而易举了。
-
实际上,我是在说我的预期操作是可能的。人们经常说“为什么,如果图书馆不做,那你就做不到”。所以说在Java中我可以做到,它有它的意义,说这是一个可能的事情。
-
你错了,这里看“大小、文件类型和路径名都是必填属性。” github.com/libarchive/libarchive/wiki/Examples请在知道的情况下回复并提供反例。
标签: c++ gzip zlib libarchive