1
私はほとんどtar.gzファイルを持っています。私はアンパックする前にいくつかのバイトをスキップする必要がありますし、それをuntarし、何かを変更し、再度パックします。なぜバイナリファイルを書き直すことができないのですか?
#!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;
}
コメントを外しバージョンgeneretesにuncomentedより短いファイルを使用している場合(バイトが途中でスキップ)なぜ。私はファイルの終わりが壊れているが、生成されたファイルが途中でどこか違うかどうかを理解するだろう。これについての説明は?
残念ながら、問題を再現するファイルをアップロードすることはできません。
おそらく、アーカイブ内のgzipストリームが壊れているバイトを編集していることが考えられます。どのようなエラーが表示されますか? –
アレックス、私はまだanythinをやっていません。私はちょうどバイト数を求めて別のファイルに書き出し、それをアーカイバで開こうとします(テストの場合のみ)。 * whileループの結果が破損したファイルと* uncomented whileループ*がうまく動作します。 – teodozjan