我有几乎tar.gz文件。我需要在解压缩之前跳过一些字节,然后解压缩它,改变一些东西并重新打包。
#!perl
open (my $src, "<", $path) or die $!;
binmode($src);
seek($src, $magicNumber,0);
open(my $tgz, ">", $path . ".tar.gz");
binmode($tgz);
#while(<$src>){
# print $tgz $_;
#}
my $n; my $data;
while(($n = read $src, $data, 4) != 0){
print $tgz $data;
}
为什么在使用未注释的版本时生成的文件比未启动的文件短(在中间跳过字节)。我会理解文件末尾是否会被破坏但生成的文件在中间某处有所不同。对此有何解释?
不幸的是我不允许上传重现问题的文件。
答案 0 :(得分:4)
对于二进制文件使用foreach(<$src>)
这样的结构通常不是很好,因为它以行模式读取(并且二进制文件没有行的概念)。
如果你在文件之间进行二进制比较,我猜你丢失的字节是CR或LF。