archive_read_support_filter_all()允许代码在构建时没有合适的库时使用外部程序。(见 https://www.freebsd.org/cgi/man.cgi?query=archive_read_support_filter_all&sektion=3&apropos=0&manpath=FreeBSD%2B10.0-RELEASE)。
但是libarchive(https://github.com/libarchive/libarchive/wiki/Examples)本身从各种格式中提取数据,这个函数是libarchive的一部分。那么什么时候应该使用它,它有什么作用呢?
两者之间有什么区别
- archive_read_support_format_all()(https://manpages.debian.org/testing/libarchive-dev/archive_read_format.3.en.html)
- archive_read_support_filter_all()
我正在使用 Libarchive 从 ODF 文件中提取数据,我在 Libarchive 的文档和示例中遇到了这个函数,不确定这个函数有什么用。
这不是它所说的。archive_read_support_filter_all()
只需"启用所有可用的解压缩过滤器"。
此外,还有一条带有特定过滤器的评论,上面写着:
这些函数可能会回退到外部 程序(如果在构建时没有合适的库) 时间。
因此,_all只是所有其他(特定)过滤器的超集。
Q.但是 libarchive (https://github.com/libarchive/libarchive/wiki/Examples) 本身从各种格式中提取数据,这个函数是 libarchive 的一部分。
嗯,这取决于它的建造方式。如果有适当的库,那么编译对zip
档案库的支持,那么是的。否则上面的评论适用:libarchive"可能会回退到外部 程序">
Q.两者有什么区别
archive_read_support_format_all()
archive_read_support_filter_all()
存档具有特定的格式(cpio,tar,zip等)。此外,它可以被过滤(gzip,bzip2,lzop,xz等)。
在某些档案中,过滤器总是相同的,但其他过滤器可以混合和匹配(因此流行的传统扩展名,如 .tgz 表示 .tar.gzip 和 .tbz2 表示 .tar.bz2)。
如果您只想使用 bzip2 启用 tar,请使用:
archive_read_support_format_tar(ar);
archive_read_support_filter_bzip2(ar);
如果你想要所有可能的压缩/其他编码过滤器,只要它是tar:
archive_read_support_format_tar(ar);
archive_read_support_filter_all(ar);
如果你想要 cpio、ar、tar 存档,但前提是没有压缩:
archive_read_support_format_ar(ar);
archive_read_support_format_cpio(ar);
archive_read_support_format_tar(ar);