我差不多有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;
}为什么使用未注释版本会生成比未注释版本更短的文件(中间跳过字节)。如果文件末尾被破坏,但生成的文件在中间的某个地方不同,我会理解。对此有什么解释吗?
不幸的是,我不被允许上传复制问题的文件。
发布于 2012-01-20 20:30:46
对二进制文件使用像foreach(<$src>)这样的结构通常不是很好,因为它是在行模式下读取的(并且二进制文件没有行的概念)。
如果你在你的文件之间做二进制比较,我会猜测你缺少的字节要么是CR,要么是LF。
https://stackoverflow.com/questions/8940582
复制相似问题