Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
File 如何使用IO::Compress::zip在perl中压缩文件_File_Perl_Zip - Fatal编程技术网

File 如何使用IO::Compress::zip在perl中压缩文件

File 如何使用IO::Compress::zip在perl中压缩文件,file,perl,zip,File,Perl,Zip,有人知道如何使用IO::Compress::Zip中的级别选项吗 我有一个问题,我试图压缩一个数据库备份文件。但压缩后的文件比原始文件小,无法用于在其他服务器上导入文件。文件是这样的。。。 我正在使用perl压缩文件,如下所示 my $zipfile = zip['MYFILE'] => $zipFile, Zip64 => 1, Method => ZIP_CM_STORE or die "Zip failed: $ZipError\n"; 但是没有成功。例

有人知道如何使用IO::Compress::Zip中的级别选项吗

我有一个问题,我试图压缩一个数据库备份文件。但压缩后的文件比原始文件小,无法用于在其他服务器上导入文件。文件是这样的。。。 我正在使用perl压缩文件,如下所示

my $zipfile = zip['MYFILE'] => $zipFile, Zip64 => 1, Method => ZIP_CM_STORE
        or die "Zip failed: $ZipError\n";
但是没有成功。例如,orig文件大小为13.910.216KB,压缩时仅为13.909.298KB

我不知道为什么,但我想我需要将Level选项设置为Z_NO_COMPRESSION。怎么做


如前所述,通过指定方法
ZIP\u CM\u STORE
,您告诉
IO::Compress::ZIP
不要压缩文件

如果根本不指定
方法
,代码将使用
ZIP\u CM\u DEFLATE
(这是几乎所有ZIP文件中使用的标准压缩)

如果要更改压缩级别,请使用
level
选项。默认情况下,它将使用压缩级别的
Z_default_COMPRESSION
。如果要获得最佳压缩,请使用
Z_best_compression

my $zipfile = zip['MYFILE'] => $zipFile, Zip64 => 1, Level => Z_BEST_COMPRESSION
        or die "Zip failed: $ZipError\n";

如前所述,通过指定方法
ZIP\u CM\u STORE
,您告诉
IO::Compress::ZIP
根本不要压缩文件

如果根本不指定
方法
,代码将使用
ZIP\u CM\u DEFLATE
(这是几乎所有ZIP文件中使用的标准压缩)

如果要更改压缩级别,请使用
level
选项。默认情况下,它将使用压缩级别的
Z_default_COMPRESSION
。如果要获得最佳压缩,请使用
Z_best_compression

my $zipfile = zip['MYFILE'] => $zipFile, Zip64 => 1, Level => Z_BEST_COMPRESSION
        or die "Zip failed: $ZipError\n";

基于对话线程,我试图重现用例

首先创建一个与您的文件大小相似的文件

$ truncate -s 13910K test
$ ls -lh test
-rw-rw-r-- 1 xxx yyy 14M Apr 13 12:00 test
使用
IO::Compress::zip

$ perl -MIO::Compress::Zip=:all -e 'zip "test" => "test.zip", Method => ZIP_CM_STORE'
检查尺寸和CRC

$ crc32 test
49769d91

$ ls -l test
-rw-rw-r-- 1 xxx yyy 14243840 Apr 13 12:00 test

$ unzip -lv test.zip 
Archive:  test.zip
 Length   Method    Size  Cmpr    Date    Time   CRC-32   Name
--------  ------  ------- ---- ---------- ----- --------  ----
14243840  Stored 14243840   0% 2020-04-13 11:48 49769d91  test
--------          -------  ---                            -------
14243840         14243840   0%                            1 file
一切如期而至。尺寸和CRC匹配


你能在你的系统上试试这个吗?

基于对话线程,我试图重现这个用例

首先创建一个与您的文件大小相似的文件

$ truncate -s 13910K test
$ ls -lh test
-rw-rw-r-- 1 xxx yyy 14M Apr 13 12:00 test
使用
IO::Compress::zip

$ perl -MIO::Compress::Zip=:all -e 'zip "test" => "test.zip", Method => ZIP_CM_STORE'
检查尺寸和CRC

$ crc32 test
49769d91

$ ls -l test
-rw-rw-r-- 1 xxx yyy 14243840 Apr 13 12:00 test

$ unzip -lv test.zip 
Archive:  test.zip
 Length   Method    Size  Cmpr    Date    Time   CRC-32   Name
--------  ------  ------- ---- ---------- ----- --------  ----
14243840  Stored 14243840   0% 2020-04-13 11:48 49769d91  test
--------          -------  ---                            -------
14243840         14243840   0%                            1 file
一切如期而至。尺寸和CRC匹配


您能在您的系统上试用吗?

ZIP\u CM\u STORE
按原样存储文件(即不压缩)。我认为你的问题在别处,也就是说,仅仅使用你展示的单行线是无法重现的。除此之外,zip使用的任何压缩都是无损的,即解压缩将在完全相同的数据中重新调整大小。请提供足够的上下文,以便您的问题能够真实再现-请看。嗨,这就是我的全部。你不需要更多的复制这个。这是我的完整代码
code
sub-NewZipFile()使用IO::Compress::Zip qw(:all);my$zipFile='myzip.zip';my$s=zip['PlaceAbigFileHereaseExample']=>zipFile,Zip64=>1,Method=>zip\u CM\u存储或死亡“zip失败:$ZipPeror\n”;}
code
Zip之后,我使用7zip并解压缩文件。而且尺寸也不一样。此外,它不能用于导入文件在我的数据库再次…这不会产生任何问题,我。您在哪里检查原始文件和生成文件的大小?在同一台机器上,或者在您将数据传输到另一台机器上之后-可能使用FTP,但不使用二进制模式?所有内容都在同一台机器上。压缩文件后,打开档案。你也可以提取文件。同样,这对我来说非常有效。请使用
-s$filename
从perl进程内部获取并打印输入和输出文件的大小,perl进程也进行压缩。
zip\u CM\u STORE
已按原样存储文件(即无压缩)。我认为你的问题在别处,也就是说,仅仅使用你展示的单行线是无法重现的。除此之外,zip使用的任何压缩都是无损的,即解压缩将在完全相同的数据中重新调整大小。请提供足够的上下文,以便您的问题能够真实再现-请看。嗨,这就是我的全部。你不需要更多的复制这个。这是我的完整代码
code
sub-NewZipFile()使用IO::Compress::Zip qw(:all);my$zipFile='myzip.zip';my$s=zip['PlaceAbigFileHereaseExample']=>zipFile,Zip64=>1,Method=>zip\u CM\u存储或死亡“zip失败:$ZipPeror\n”;}
code
Zip之后,我使用7zip并解压缩文件。而且尺寸也不一样。此外,它不能用于导入文件在我的数据库再次…这不会产生任何问题,我。您在哪里检查原始文件和生成文件的大小?在同一台机器上,或者在您将数据传输到另一台机器上之后-可能使用FTP,但不使用二进制模式?所有内容都在同一台机器上。压缩文件后,打开档案。你也可以提取文件。同样,这对我来说非常有效。请使用
-s$filename
从perl进程内部获取并打印输入和输出文件的大小,perl进程也会执行压缩。