使用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 (将#修改为@)