IO::Compress::Zip - 写入 zip 文件/缓冲区
use IO::Compress::Zip qw(zip $ZipError) ;
my $status = zip $input => $output [,OPTS]
or die "zip failed: $ZipError\n";
my $z = IO::Compress::Zip->new( $output [,OPTS] )
or die "zip failed: $ZipError\n";
$z->print($string);
$z->printf($format, $string);
$z->write($string);
$z->syswrite($string [, $length, $offset]);
$z->flush();
$z->tell();
$z->eof();
$z->seek($position, $whence);
$z->binmode();
$z->fileno();
$z->opened();
$z->autoflush();
$z->input_line_number();
$z->newStream( [OPTS] );
$z->deflateParams();
$z->close() ;
$ZipError ;
# IO::File mode
print $z $string;
printf $z $format, $string;
tell $z
eof $z
seek $z, $position, $whence
binmode $z
fileno $z
close $z ;
此模块提供一个 Perl 接口,允许将 zip 压缩数据写入文件或缓冲区。
此模块的主要目的是提供对 zip 文件和缓冲区的流式写入访问。
目前,IO::Compress::Zip 支持以下压缩方法
要写入 Bzip2 内容,必须安装模块 IO::Uncompress::Bunzip2
。
要写入 LZMA 内容,必须安装模块 IO::Uncompress::UnLzma
。
要写入 Zstandard 内容,必须安装模块 IO::Compress::Zstd
。
要写入 Xz 内容,必须安装模块 IO::Uncompress::UnXz
。
要读取 zip 文件/缓冲区,请参阅配套模块 IO::Uncompress::Unzip。
提供了一个顶级函数 zip
,用于在缓冲区和/或文件之间执行“一次性”压缩。有关压缩过程的更精细控制,请参阅 "面向对象接口" 部分。
use IO::Compress::Zip qw(zip $ZipError) ;
zip $input_filename_or_reference => $output_filename_or_reference [,OPTS]
or die "zip failed: $ZipError\n";
函数式接口需要 Perl5.005 或更高版本。
zip
至少需要两个参数,$input_filename_or_reference
和 $output_filename_or_reference
,以及零个或多个可选参数(请参阅 "可选参数")
$input_filename_or_reference
参数参数 $input_filename_or_reference
用于定义未压缩数据的来源。
它可以采用以下形式之一
如果 $input_filename_or_reference
参数是一个简单的标量,则它被认为是一个文件名。此文件将被打开以供读取,并且输入数据将从该文件读取。
如果 $input_filename_or_reference
参数是一个文件句柄,则输入数据将从该文件句柄读取。字符串 '-' 可以用作标准输入的别名。
如果 $input_filename_or_reference
是一个标量引用,则输入数据将从 $$input_filename_or_reference
读取。
如果 $input_filename_or_reference
是一个数组引用,则数组中的每个元素都必须是一个文件名。
输入数据将依次从每个文件读取。
将遍历整个数组以确保它只包含有效的文件名,然后再压缩任何数据。
如果 $input_filename_or_reference
是一个由字符 "<" 和 ">" 分隔的字符串,zip
将假定它是一个输入文件通配符字符串。输入是与文件通配符匹配的文件列表。
有关更多详细信息,请参阅 File::GlobMapper。
如果 $input_filename_or_reference
参数是任何其他类型,则将返回 undef
。
此外,如果 $input_filename_or_reference
对应于文件系统中的文件名,则将使用输入文件的以下属性默认填充一些 zip 文件头字段
$input_filename_or_reference
中包含的完整文件名
文件保护属性
文件的 UID/GID
文件时间戳
如果您不想使用这些默认值,可以通过显式设置一个或多个 Name
、Time
、TextFlag
、ExtAttr
、exUnixN
和 exTime
选项,或者通过设置 Minimal
参数来覆盖它们。
$output_filename_or_reference
参数$output_filename_or_reference
参数用于控制压缩数据的目标。此参数可以采用以下形式之一。
如果 $output_filename_or_reference
参数是一个简单的标量,则它被认为是一个文件名。此文件将被打开以供写入,并且压缩数据将写入该文件。
如果 $output_filename_or_reference
参数是一个文件句柄,压缩后的数据将写入到该文件句柄。字符串 '-' 可以用作标准输出的别名。
如果 $output_filename_or_reference
是一个标量引用,压缩后的数据将存储在 $$output_filename_or_reference
中。
如果 $output_filename_or_reference
是一个数组引用,压缩后的数据将被推送到数组中。
如果 $output_filename_or_reference
是一个由字符 "<" 和 ">" 分隔的字符串,zip
将假设它是一个输出文件通配符字符串。输出是与文件通配符匹配的文件列表。
当 $output_filename_or_reference
是一个文件通配符字符串时,$input_filename_or_reference
也必须是一个文件通配符字符串。任何其他类型都是错误。
有关更多详细信息,请参阅 File::GlobMapper。
如果 $output_filename_or_reference
参数是任何其他类型,将返回 undef
。
当 $input_filename_or_reference
映射到多个文件/缓冲区,而 $output_filename_or_reference
是单个文件/缓冲区时,输入文件/缓冲区将分别存储在 $output_filename_or_reference
中作为独立的条目。
一次性函数 zip
的可选参数(在大多数情况下)与在 "构造函数选项" 部分中定义的 OO 接口中使用的参数相同。例外情况如下所述
AutoClose => 0|1
此选项适用于任何输入或输出数据流到 zip
,这些数据流是文件句柄。
如果指定了 AutoClose
,并且值为 true,则所有输入和/或输出文件句柄将在 zip
完成后关闭。
此参数默认为 0。
BinModeIn => 0|1
此选项现在是一个无操作选项。所有文件都将以二进制模式读取。
Append => 0|1
此选项的行为取决于输出数据流的类型。
缓冲区
如果启用了 Append
,所有压缩数据将追加到输出缓冲区的末尾。否则,在写入任何压缩数据之前,将清除输出缓冲区。
文件名
如果启用了 Append
,则将以追加模式打开文件。否则,在写入任何压缩数据之前,将截断文件的内容(如果有)。
文件句柄
如果启用了 Append
,则在写入任何压缩数据之前,将通过调用 seek
将文件句柄定位到文件末尾。否则,文件指针将不会移动。
当指定 Append
并将其设置为 true 时,它将追加所有压缩数据到输出数据流。
因此,当输出是文件句柄时,它将在写入任何压缩数据之前执行 seek 到文件末尾的操作。如果输出是文件名,则将以追加模式打开它。如果输出是缓冲区,则所有压缩数据将追加到现有缓冲区。
相反,当未指定 Append
或它存在且设置为 false 时,它将按如下方式操作。
当输出是文件名时,它将在写入任何压缩数据之前截断文件的内容。如果输出是文件句柄,则其位置不会改变。如果输出是缓冲区,则在输出任何压缩数据之前,它将被清除。
默认值为 0。
以下是一些示例,展示了该模块的功能。
这个非常简单的命令行示例演示了该模块的流式传输功能。代码从 STDIN 读取数据,压缩它,并将压缩后的数据写入 STDOUT。
$ echo hello world | perl -MIO::Compress::Zip=zip -e 'zip \*STDIN => \*STDOUT' >output.zip
特殊文件名 "-" 可用作 \*STDIN
和 \*STDOUT
的替身,因此上述内容可以改写为
$ echo hello world | perl -MIO::Compress::Zip=zip -e 'zip "-" => "-"' >output.zip
通过查看我们刚刚创建的 zip 文件 output.zip 的内容,可以演示直接从 STDIN 创建 zip 存档的一个问题。
$ unzip -l output.zip
Archive: output.zip
Length Date Time Name
--------- ---------- ----- ----
12 2019-08-16 22:21
--------- -------
12 1 file
使用的存档成员(文件名)是空字符串。
如果这不能满足您的需求,您可以通过指定 Name 选项来显式设置 zip 存档中使用的文件名,如下所示
echo hello world | perl -MIO::Compress::Zip=zip -e 'zip "-" => "-", Name => "hello.txt"' >output.zip
现在 zip 文件的内容如下所示
$ unzip -l output.zip
Archive: output.zip
Length Date Time Name
--------- ---------- ----- ----
12 2019-08-16 22:22 hello.txt
--------- -------
12 1 file
要读取文件 file1.txt
的内容并将压缩后的数据写入文件 file1.txt.zip
。
use strict ;
use warnings ;
use IO::Compress::Zip qw(zip $ZipError) ;
my $input = "file1.txt";
zip $input => "$input.zip"
or die "zip failed: $ZipError\n";
从现有的 Perl 文件句柄 $input
读取数据,并将压缩后的数据写入缓冲区 $buffer
。
use strict ;
use warnings ;
use IO::Compress::Zip qw(zip $ZipError) ;
use IO::File ;
my $input = IO::File->new( "<file1.txt" )
or die "Cannot open 'file1.txt': $!\n" ;
my $buffer ;
zip $input => \$buffer
or die "zip failed: $ZipError\n";
创建一个名为 output.zip
的 zip 文件,其中包含文件 alpha.txt
和 beta.txt
的压缩内容。
use strict ;
use warnings ;
use IO::Compress::Zip qw(zip $ZipError) ;
zip [ 'alpha.txt', 'beta.txt' ] => 'output.zip'
or die "zip failed: $ZipError\n";
或者,您可以使用文件通配符来选择当前目录中的所有 txt
文件,而不是显式地命名要压缩的每个文件,如下所示
use strict ;
use warnings ;
use IO::Compress::Zip qw(zip $ZipError) ;
my @files = <*.txt>;
zip \@files => 'output.zip'
or die "zip failed: $ZipError\n";
或者更简洁地
zip [ <*.txt> ] => 'output.zip'
or die "zip failed: $ZipError\n";
IO::Compress::Zip
的构造函数格式如下所示
my $z = IO::Compress::Zip->new( $output [,OPTS] )
or die "IO::Compress::Zip failed: $ZipError\n";
成功时返回一个 IO::Compress::Zip
对象,失败时返回 undef。变量 $ZipError
将在失败时包含错误消息。
如果您运行的是 Perl 5.005 或更高版本,则从 IO::Compress::Zip 返回的对象 $z
可以像 IO::File 文件句柄一样使用。这意味着所有正常的输出文件操作都可以使用 $z
执行。例如,要写入压缩文件/缓冲区,您可以使用以下两种形式之一
$z->print("hello world\n");
print $z "hello world\n";
必需参数 $output
用于控制压缩数据的目的地。此参数可以采用以下形式之一。
如果 $output
参数是一个简单的标量,则它被认为是一个文件名。此文件将被打开以供写入,压缩后的数据将被写入其中。
如果 $output
参数是一个文件句柄,则压缩后的数据将被写入其中。字符串 '-' 可以用作标准输出的别名。
如果 $output
是一个标量引用,则压缩后的数据将存储在 $$output
中。
如果 $output
参数是任何其他类型,IO::Compress::Zip
::new 将返回 undef。
OPTS
是以下选项的任意组合,可以为零个或多个
AutoClose => 0|1
此选项仅在 $output
参数为文件句柄时有效。如果指定,并且值为真,则在调用 close
方法或销毁 IO::Compress::Zip
对象后,将关闭 $output
。
此参数默认为 0。
Append => 0|1
以追加模式打开 $output
。
此选项的行为取决于 $output
的类型。
缓冲区
如果 $output
是一个缓冲区,并且启用了 Append
,则所有压缩数据将追加到 $output
的末尾。否则,在写入任何数据之前,将清除 $output
。
文件名
如果 $output
是一个文件名,并且启用了 Append
,则该文件将以追加模式打开。否则,在写入任何压缩数据之前,将截断该文件的内容(如果有)。
文件句柄
如果 $output
是一个文件句柄,则在写入任何压缩数据之前,将通过调用 seek
将文件指针定位到文件的末尾。否则,文件指针将不会移动。
此参数默认为 0。
关于 zip 文件术语的简要说明 - 一个 zip 存档包含一个或多个存档成员,每个成员都有一个关联的文件名,称为存档成员名称。
本节中列出的选项控制存档成员名称(或文件名)在 zip 存档中的存储方式。
Name => $string
此选项用于将 zip 存档中的存档成员名称显式设置为 $string
。大多数情况下,您不需要使用此选项。默认情况下,在将文件名添加到 zip 存档时,存档成员名称将与文件名匹配。
您只需要在希望存档成员名称与未压缩文件名不同,或者输入是文件句柄或缓冲区时使用此选项。
当未指定 Name
选项时,使用的存档成员名称的默认行为取决于 $input
参数的形式。
如果 $input
参数是一个文件名,则 $input
的值将用作存档成员名称。
如果 $input
参数不是文件名,则存档成员名称将是一个空字符串。
请注意,CanonicalName
和 FilterName
选项都可以修改用于存档成员名称的值。
另外请注意,如果您使用的是 UTF8 文件名,则应将 Efs
选项设置为 true。
CanonicalName => 0|1
此选项控制是否将存档成员名称规范化为 Unix 格式,然后再写入 zip 文件。
建议您启用此选项,除非您确实需要创建非标准 Zip 文件。
这是 APPNOTE.TXT 关于应存储在 zip 文件名标题字段中的内容。
The name of the file, with optional relative path.
The path stored should not contain a drive or
device letter, or a leading slash. All slashes
should be forward slashes '/' as opposed to
backwards slashes '\' for compatibility with Amiga
and UNIX file systems etc.
此选项默认为 false。
FilterName => sub { ... }
此选项允许在将存档成员名称写入 zip 文件之前对其进行修改。
此选项接受一个参数,该参数必须是对子例程的引用。在进入子例程时,$_
变量将包含要过滤的名称。如果没有文件名可用,$_
将包含一个空字符串。
子例程返回时,$_
的值将用作存档成员名称。
请注意,如果启用了 CanonicalName
,则将向子例程传递规范化的文件名。
如果您使用 FilterName
修改文件名,则有责任将文件名保持在 Unix 格式。
虽然此选项可与 OO 接口一起使用,但它在一次性接口中最有用。例如,以下代码展示了如何使用 FilterName
在将一系列文件名存储在 $zipfile
中之前,从这些文件名中删除路径组件。
sub compressTxtFiles
{
my $zipfile = shift ;
my $dir = shift ;
zip [ <$dir/*.txt> ] => $zipfile,
FilterName => sub { s[^$dir/][] } ;
}
Efs => 0|1
此选项控制在 zip 存档中设置“语言编码标志”(EFS)。设置后,zip 存档的文件名和注释字段必须是有效的 UTF-8。
如果在启用此选项时,用于文件名和/或注释的字符串不是有效的 UTF-8,则脚本将因“宽字符”错误而终止。
请注意,此选项仅适用于 Perl 5.8.4 或更高版本。
此选项默认为 false。
Minimal => 1|0
如果指定,此选项将禁用在 zip 本地和中央头文件中创建所有额外字段。因此,exTime
、exUnix2
、exUnixN
、ExtraFieldLocal
和 ExtraFieldCentral
选项将被忽略。
此参数默认为 0。
Stream => 0|1
此选项控制是否以流模式创建 zip 文件/缓冲区输出。
请注意,当以禁用流模式(Stream
为 0)的方式输出到文件时,输出文件必须是可寻址的。
默认值为 1。
Zip64 => 0|1
创建 Zip64 zip 文件/缓冲区。如果您想存储大于 4 GB 的文件或在一个 zip 存档中存储超过 64K 个文件,则使用此选项。
当输入是文件名或标量引用时,在使用一次性接口时,Zip64
将根据需要自动设置。
如果您打算使用外部 zip/unzip 操作使用此模块创建的 Zip64 zip 文件,请确保它支持 Zip64。
特别是,如果您使用的是 Info-Zip,则需要使用 zip 版本 3.x 或更高版本来更新 Zip64 存档,并使用 unzip 版本 6.x 来读取 zip64 存档。
默认值为 0。
定义 zlib 使用的压缩级别。该值应为 0 到 9 之间的数字(0 表示不压缩,9 表示最大压缩),或以下定义的符号常量之一。
Z_NO_COMPRESSION
Z_BEST_SPEED
Z_BEST_COMPRESSION
Z_DEFAULT_COMPRESSION
默认值为 Z_DEFAULT_COMPRESSION。
请注意,这些常量默认情况下不会被 IO::Compress::Zip
导入。
use IO::Compress::Zip qw(:strategy);
use IO::Compress::Zip qw(:constants);
use IO::Compress::Zip qw(:all);
定义用于调整压缩的策略。使用以下定义的符号常量之一。
Z_FILTERED
Z_HUFFMAN_ONLY
Z_RLE
Z_FIXED
Z_DEFAULT_STRATEGY
默认值为 Z_DEFAULT_STRATEGY。
BlockSize100K => number
指定 bzip2 在压缩期间使用的 100K 块数量。
有效值为 1 到 9,其中 9 是最佳压缩。
此选项仅在 Method
为 ZIP_CM_BZIP2 时有效。否则将被忽略。
默认值为 1。
WorkFactor => number
指定 bzip2 在使用较慢的回退压缩算法之前应花费多少努力。
有效值范围为 0 到 250,其中 0 表示使用默认值 30。
此选项仅在 Method
为 ZIP_CM_BZIP2 时有效。否则将被忽略。
默认值为 0。
Preset => number
用于选择 LZMA 压缩预设。
有效值为 0-9 和 LZMA_PRESET_DEFAULT
。
0 是最快的压缩,内存使用量最低,压缩率最低。
9 是最慢的压缩,内存使用量最高,但压缩率最高。
此选项仅在 Method
为 ZIP_CM_LZMA 时有效。否则将被忽略。
默认为 LZMA_PRESET_DEFAULT
(6)。
Extreme => 0|1
使 LZMA 压缩速度慢很多,但压缩增益很小。
此选项仅在 Method
为 ZIP_CM_LZMA 时有效。否则将被忽略。
默认值为 0。
Time => $number
将 zip 头部的最后修改时间字段设置为 $number。
如果未指定此选项且 $input
参数不是文件名,则此字段默认为创建 IO::Compress::Zip
对象的时间。
ExtAttr => $attr
此选项控制 zip 文件中央头部的“外部文件属性”字段。这是一个 4 字节字段。
如果您运行的是 Unix 派生系统,则此值默认为
0100644 << 16
这应该允许对从 zip 文件/缓冲区中提取的任何文件进行读写访问。
对于所有其他系统,它默认为 0。
exTime => [$atime, $mtime, $ctime]
此选项期望一个包含三个元素的数组引用:$atime
、mtime
和 $ctime
。它们分别对应于最后访问时间、最后修改时间和创建时间。
它使用这些值在本地 zip 头部中使用三个值 $atime、$mtime、$ctime 设置扩展时间戳字段(ID 为“UT”)。此外,它使用 $mtime
在中央 zip 头部中设置扩展时间戳字段。
如果三个值中的任何一个为undef
,则该时间值将不会被使用。例如,要仅设置$mtime
,可以使用以下代码
exTime => [undef, $mtime, undef]
如果Minimal
选项设置为true,则此选项将被忽略。
默认情况下,不会创建扩展时间字段。
exUnix2 => [$uid, $gid]
此选项需要一个包含两个元素的数组引用:$uid
和$gid
。这些值分别对应于文件所有者的数字用户 ID (UID) 和组 ID (GID)。
当exUnix2
选项存在时,它将触发在本地 zip 文件头中创建一个 Unix2 扩展字段(ID 为“Ux”)。该字段将填充$uid
和$gid
。在中央 zip 文件头中也将创建一个空的 Unix2 扩展字段。
注意 - UID 和 GID 存储在“Ux”字段中的 16 位整数中。如果您的 UID 或 GID 为 32 位,请使用exUnixN
。
如果Minimal
选项设置为true,则此选项将被忽略。
默认情况下,不会创建 Unix2 扩展字段。
exUnixN => [$uid, $gid]
此选项需要一个包含两个元素的数组引用:$uid
和$gid
。这些值分别对应于文件所有者的数字用户 ID (UID) 和组 ID (GID)。
当exUnixN
选项存在时,它将触发在本地和中央 zip 文件头中创建一个 UnixN 扩展字段(ID 为“ux”)。该字段将填充$uid
和$gid
。UID 和 GID 存储为 32 位整数。
如果Minimal
选项设置为true,则此选项将被忽略。
默认情况下,不会创建 UnixN 扩展字段。
Comment => $comment
将$comment
的内容存储在 zip 文件的中央文件头中。
如果要存储 UTF8 注释,请将Efs
选项设置为 true。
默认情况下,不会将注释字段写入 zip 文件。
ZipComment => $comment
将$comment
的内容存储在 zip 文件的中央目录结束记录中。
默认情况下,不会将注释字段写入 zip 文件。
Method => $method
控制使用哪种压缩方法。目前支持的压缩方法包括:Store(无压缩)、Deflate、Bzip2、Zstd、Xz 和 Lzma。
使用符号 ZIP_CM_STORE、ZIP_CM_DEFLATE、ZIP_CM_BZIP2、ZIP_CM_ZSTD、ZIP_CM_XZ 和 ZIP_CM_LZMA 来选择压缩方法。
这些常量默认情况下不会被 IO::Compress::Zip
导入。
use IO::Compress::Zip qw(:zip_method);
use IO::Compress::Zip qw(:constants);
use IO::Compress::Zip qw(:all);
请注意,要创建 Bzip2 内容,必须安装 IO::Compress::Bzip2
模块。如果尝试在 IO::Compress::Bzip2
不可用时创建 Bzip2 内容,将抛出致命错误。
请注意,要创建 Lzma 内容,必须安装 IO::Compress::Lzma
模块。如果尝试在 IO::Compress::Lzma
不可用时创建 Lzma 内容,将抛出致命错误。
请注意,要创建 Xz 内容,必须安装 IO::Compress::Xz
模块。如果尝试在 IO::Compress::Xz
不可用时创建 Xz 内容,将抛出致命错误。
请注意,要创建 Zstd 内容,必须安装 IO::Compress::Zstd
模块。如果尝试在 IO::Compress::Zstd
不可用时创建 Zstd 内容,将抛出致命错误。
默认方法是 ZIP_CM_DEFLATE。
TextFlag => 0|1
此参数控制在 zip 中央头文件中设置一个位。它用于指示存储在 zip 文件/缓冲区中的数据可能是文本。
在一次性模式下,如果 Perl 的 -T
运算符认为文件包含文本,则此标志将被设置为 true。
默认值为 0。
ExtraFieldLocal => $data
ExtraFieldCentral => $data
ExtraFieldLocal
选项用于在 zip 文件/缓冲区的本地头文件中存储额外的元数据。ExtraFieldCentral
对匹配的中央头文件执行相同的操作。
一个额外的字段由零个或多个子字段组成。每个子字段由一个两字节头和子字段数据组成。
子字段列表可以以以下任何一种格式提供
ExtraFieldLocal => [$id1, $data1,
$id2, $data2,
...
]
ExtraFieldLocal => [ [$id1 => $data1],
[$id2 => $data2],
...
]
ExtraFieldLocal => { $id1 => $data1,
$id2 => $data2,
...
}
其中 $id1
、$id2
是两个字节的子字段 ID。
如果您使用哈希语法,则无法控制 ExtraSubFields 的存储顺序,并且不能有 ID 重复的 SubFields。
或者,子字段列表可以作为标量提供,因此
ExtraField => $rawdata
在这种情况下,IO::Compress::Zip
将检查 $rawdata
是否包含零个或多个符合规范的子字段。
扩展时间字段(ID "UT"),使用 exTime
选项设置,以及 Unix2 扩展字段(ID "Ux"),使用 exUnix2
选项设置,是扩展字段的示例。
如果Minimal
选项设置为true,则此选项将被忽略。
扩展字段的最大大小为 65535 字节。
Strict => 0|1
这是一个占位符选项。
待办事项
用法是
$z->print($data)
print $z $data
压缩并输出 $data
参数的内容。这与 print
内置函数的行为相同。
如果成功,则返回 true。
用法是
$z->printf($format, $data)
printf $z $format, $data
压缩并输出 $data
参数的内容。
如果成功,则返回 true。
用法是
$z->syswrite $data
$z->syswrite $data, $length
$z->syswrite $data, $length, $offset
压缩并输出 $data
参数的内容。
返回写入的未压缩字节数,如果失败则返回 undef
。
用法是
$z->write $data
$z->write $data, $length
$z->write $data, $length, $offset
压缩并输出 $data
参数的内容。
返回写入的未压缩字节数,如果失败则返回 undef
。
用法是
$z->flush;
$z->flush($flush_type);
将任何待处理的压缩数据刷新到输出文件/缓冲区。
此方法接受一个可选参数 $flush_type
,它控制刷新的执行方式。默认情况下,使用的 $flush_type
是 Z_FINISH
。$flush_type
的其他有效值为 Z_NO_FLUSH
、Z_SYNC_FLUSH
、Z_FULL_FLUSH
和 Z_BLOCK
。强烈建议您仅在完全了解其含义的情况下才设置 flush_type
参数 - 过度使用 flush
会严重降低压缩水平。有关详细信息,请参阅 zlib
文档。
成功时返回 true。
用法是
$z->tell()
tell $z
返回未压缩的文件偏移量。
用法是
$z->eof();
eof($z);
如果已调用 close
方法,则返回 true。
$z->seek($position, $whence);
seek($z, $position, $whence);
提供 seek
功能的子集,限制是仅允许在输出文件/缓冲区中向前查找。尝试向后查找是致命错误。
文件的空部分/缓冲区将写入 NULL (0x00) 字节。
$whence
参数采用一个常用的值,即 SEEK_SET、SEEK_CUR 或 SEEK_END。
成功返回 1,失败返回 0。
用法是
$z->binmode
binmode $z ;
这是一个为了完整性而提供的空操作。
$z->opened()
如果对象当前引用的是已打开的文件/缓冲区,则返回 true。
my $prev = $z->autoflush()
my $prev = $z->autoflush(EXPR)
如果 $z
对象与文件或文件句柄相关联,则此方法将返回底层文件句柄的当前自动刷新设置。如果存在 EXPR
且不为零,则它将在每次写入/打印操作后启用刷新。
如果 $z
与缓冲区相关联,则此方法无效,始终返回 undef
。
注意,特殊变量 $|
不能用于设置或检索自动刷新设置。
$z->input_line_number()
$z->input_line_number(EXPR)
此方法在压缩时始终返回 undef
。
$z->fileno()
fileno($z)
如果 $z
对象与文件或文件句柄相关联,则 fileno
将返回底层文件描述符。一旦调用 close
方法,fileno
将返回 undef
。
如果 $z
对象与缓冲区相关联,则此方法将返回 undef
。
$z->close() ;
close $z ;
刷新所有挂起的压缩数据,然后关闭输出文件/缓冲区。
对于大多数版本的 Perl,如果 IO::Compress::Zip 对象被销毁(无论是显式销毁还是通过对对象的引用的变量超出范围),此方法将自动调用。例外情况是 Perl 版本 5.005 到 5.00504 和 5.8.0。在这些情况下,close
方法将自动调用,但直到程序终止时所有活动对象的全局销毁才会调用。
因此,如果您希望您的脚本能够在所有版本的 Perl 上运行,您应该显式调用 close
,不要依赖自动关闭。
成功返回 true,否则返回 0。
如果在创建 IO::Compress::Zip 对象时启用了 AutoClose
选项,并且对象与文件相关联,则底层文件也将被关闭。
用法是
$z->newStream( [OPTS] )
关闭当前压缩数据流并启动一个新的数据流。
OPTS 包含在创建 $z
对象时可用的任何选项。
有关更多详细信息,请参见 "构造函数选项" 部分。
用法是
$z->deflateParams
待办事项
IO::Compress::Zip
中的一些方法需要一些符号常量。默认情况下不会导入任何常量。
导入 zip
、$ZipError
和 IO::Compress::Zip
可用的所有符号常量。与执行以下操作相同
use IO::Compress::Zip qw(zip $ZipError :constants) ;
导入所有符号常量。与执行以下操作相同
use IO::Compress::Zip qw(:flush :level :strategy :zip_method) ;
这些符号常量由 flush
方法使用。
Z_NO_FLUSH
Z_PARTIAL_FLUSH
Z_SYNC_FLUSH
Z_FULL_FLUSH
Z_FINISH
Z_BLOCK
这些符号常量由构造函数中的 Level
选项使用。
Z_NO_COMPRESSION
Z_BEST_SPEED
Z_BEST_COMPRESSION
Z_DEFAULT_COMPRESSION
这些符号常量由构造函数中的 Strategy
选项使用。
Z_FILTERED
Z_HUFFMAN_ONLY
Z_RLE
Z_FIXED
Z_DEFAULT_STRATEGY
这些符号常量由构造函数中的 Method
选项使用。
ZIP_CM_STORE
ZIP_CM_DEFLATE
ZIP_CM_BZIP2
一般反馈/问题/错误报告应发送至 https://github.com/pmqs/IO-Compress/issues(首选)或 https://rt.cpan.org/Public/Dist/Display.html?Name=IO-Compress。
Compress::Zlib,IO::Compress::Gzip,IO::Uncompress::Gunzip,IO::Compress::Deflate,IO::Uncompress::Inflate,IO::Compress::RawDeflate,IO::Uncompress::RawInflate,IO::Compress::Bzip2,IO::Uncompress::Bunzip2,IO::Compress::Lzma,IO::Uncompress::UnLzma,IO::Compress::Xz,IO::Uncompress::UnXz,IO::Compress::Lzip,IO::Uncompress::UnLzip,IO::Compress::Lzop,IO::Uncompress::UnLzop,IO::Compress::Lzf,IO::Uncompress::UnLzf,IO::Compress::Zstd,IO::Uncompress::UnZstd,IO::Uncompress::AnyInflate,IO::Uncompress::AnyUncompress
File::GlobMapper,Archive::Zip,Archive::Tar,IO::Zlib
有关 RFC 1950、1951 和 1952,请参见 https://datatracker.ietf.org/doc/html/rfc1950,https://datatracker.ietf.org/doc/html/rfc1951 和 https://datatracker.ietf.org/doc/html/rfc1952
zlib 压缩库由 Jean-loup Gailly [email protected]
和 Mark Adler [email protected]
编写。
zlib 压缩库的主站点是 http://www.zlib.org。
zlib-ng 压缩库的主站点是 https://github.com/zlib-ng/zlib-ng。
gzip 的主站点是 http://www.gzip.org。
此模块由 Paul Marquess 编写,[email protected]
。
请参见 Changes 文件。
版权所有 (c) 2005-2023 Paul Marquess。保留所有权利。
本程序是自由软件;您可以在 Perl 本身相同的条款下重新发布和/或修改它。