我尝试使用Perl压缩一些大约5 MB的CSV文件。以下是我的邮政编码。
这些文件是压缩的,但当我使用Windows解压缩实用程序打开它时,我发现CSV文件的最后几行丢失了。这可能是什么问题?我尝试更改chuncksize
和desiredCompressionLevel
,但这没有帮助。
sub zip_util{
my $directory = shift;
$zip = Archive::Zip->new();
$zip->setChunkSize(65536);
# Add a file from disk
my $file1=File::Spec->catfile($directory, 'file.csv');
my $file2=File::Spec->catfile($directory, 'file2.csv');
my $file3=File::Spec->catfile($directory, 'fil3.csv');
$zip->addFile($file1,'file1.csv')->desiredCompressionLevel( 6 );
$zip->addFile($file2,'file2.csv')->desiredCompressionLevel( 6 );
$zip->addFile($fil3,'file3.csv')->desiredCompressionLevel( 6 );
# Save the Zip file
my $zipped_file=File::Spec->catfile($directory,'files.zip');
unless ( $zip->writeToFileNamed($zipped_file) == AZ_OK ) {
print LOG ": Zip Creation error\n";
}
答案 0 :(得分:1)
我已经用警告和限制检查了它,我发现了一些问题。
$zip
不使用my
(我不知道它是否有意,但use strict
确实有助于像这样的全局变量。)$zip->addFile($fil3,'file3.csv')
。 $fil3
变量肯定不存在。如果有的话,这个变量是$file3
。我已经完成了我在测试过程中使用的快速脚本。
use strict;
use warnings;
use Archive::Zip qw( :ERROR_CODES );
use File::Spec;
sub zip_util {
my ($directory) = @_;
my $zip = Archive::Zip->new();
$zip->setChunkSize(65536);
# Add a file from disk
my $file1 = File::Spec->catfile( $directory, 'file.csv' );
my $file2 = File::Spec->catfile( $directory, 'file2.csv' );
my $file3 = File::Spec->catfile( $directory, 'file3.csv' );
$zip->addFile( $file1, 'file1.csv' )->desiredCompressionLevel(6);
$zip->addFile( $file2, 'file2.csv' )->desiredCompressionLevel(6);
$zip->addFile( $file3, 'file3.csv' )->desiredCompressionLevel(6);
# Save the Zip file
my $zipped_file = File::Spec->catfile( $directory, 'files.zip' );
if ( $zip->writeToFileNamed($zipped_file) != AZ_OK ) {
print STDERR "Zip Creation error\n";
}
}
zip_util '.';
问题在于它正在发挥作用。所以,我已经完成了这个脚本来制作一些5MB的文件:
use strict;
use warnings;
use 5.010;
for ( 1 .. 524_288 ) {
my $number = $_ % 10;
say "$number-------";
}
ZIP和原始“CSV”中的文件都具有相同的大小和内容。所以,这可能是我提到的第二个问题 - 使用$fil3
变量或者你的文件(你很遗憾没有上传,所以我无法查看这些)。