我正在尝试使用 libarchive 在 Windows 上创建压缩存档,但目前它无法正常工作。我可以创建 zip 或 pax_restricted(tar) 存档而无需压缩,没有任何问题。
为了添加压缩,我尝试了以下一些组合:
archive_write_set_compression_lzip(lWriteArchive);
archive_write_add_filter_lzip(lWriteArchive);
archive_write_set_compression_gzip(lWriteArchive);
archive_write_add_filter_gzip(lWriteArchive);
archive_write_set_format_zip(lWriteArchive);
archive_write_set_format_pax_restricted(lWriteArchive);
Run Code Online (Sandbox Code Playgroud)
我主要尝试使用 zip 格式的 lzip 压缩和 pax_restricted 格式的 gzip 压缩。
首先,我不确定是否应该使用 archive_write_set_compression_* 或 archive_write_add_filter_*。
当我尝试添加 lzip 压缩并进入该函数时,我看到它返回 ARCHIVE_FATAL 并带有错误消息“此平台不支持 lzma 压缩”。
当我尝试添加 gzip 压缩并进入该函数时,我看到它返回 ARCHIVE_WARN 并带有错误消息“使用外部 gzip 程序”。如果我让该过程继续进行,则生成的存档的大小为零。
我感觉在 UNIX 系统上有 libarchive 用于压缩的 lzma 和 gzip 系统库,而这些在 Windows 上不可用。
我使用最新的稳定版本构建了 libarchive,按照使用 CMake 等的说明进行操作。我没有注意到 CMake 配置中有任何错误,例如缺少 lzma 或 gzip。
谢谢你的帮助。
我已经有10多年的Perl编程了,所以对于经验丰富的Perl程序员来说这可能是显而易见的.我搜索了一个答案,但没有找到任何答案.
我的问题是:为什么引用匿名数组标量?
例如,在以下代码中:
#!/usr/bin/perl
use strict;
use feature qw(say);
my @array1 = ('one');
say 'array ref 1: ' . \@array1;
my @array2 = ('one', 'two');
say 'array ref 2: ' . \@array2;
say 'array ref 3: ' . \('one');
say 'array ref 4: ' . \('one', 'two');
exit 0;
Run Code Online (Sandbox Code Playgroud)
结果是:
array ref 1: ARRAY(0x1e1b1c0)
array ref 2: ARRAY(0x1e1b190)
array ref 3: SCALAR(0x1e1b280)
array ref 4: SCALAR(0x1e10c40)
Run Code Online (Sandbox Code Playgroud)
为什么数组引用3和数组引用4标量?