微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用libarchive

如何解决使用libarchive

我开始学习将libarchive集成到我的一个项目中。

在我能看到的first example中,它说明了如何打开档案并列出存储的文件

struct archive *a;
struct archive_entry *entry;
int r;

a = archive_read_new();
archive_read_support_filter_all(a);
archive_read_support_format_all(a);
r = archive_read_open_filename(a,"archive.tar",10240); // Note 1
if (r != ARCHIVE_OK)
  exit(1);
while (archive_read_next_header(a,&entry) == ARCHIVE_OK) {
  printf("%s\\n",archive_entry_pathname(entry));
  archive_read_data_skip(a);  // Note 2
}
r = archive_read_free(a);  // Note 3
if (r != ARCHIVE_OK)
  exit(1);

我无法理解10240的值。根据文档,它应该是blocksize,但是我不知道如何处理。由于我要处理不同的存档格式(7zip,zip,tar.gz等),并且每种格式都可以使用不同的选项压缩,因此如何为要打开的每个存档选择正确的块大小?我可以通过某种方式从档案中推导出来吗?

相关注释如下:

注1:从libarchive 3.0开始,archive_read_open_filename()函数在决定如何处理块大小之前先检查文件。例如,如果提供的文件名涉及磁带设备,它将完全使用您指定的块大小。对于其他设备,它可能会调整请求的块大小,以获得更好的性能

这意味着在实践中,如果我不将归档文件存储在磁带中,则会忽略blocksize值(libarchive版本> = 3.0)?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。