2017-12-19 24 views
-1

私が書いているプログラムがgzipヘッダーを正しく解析していて、FEXTRA、FNAME、およびFCOMMENTフィールドの読み込みをテストする必要があります。しかし、gzipは、FEXTRAフィールドとFCOMMENTフィールド(FNAMEのみ)でアーカイブを作成することをサポートしていないようです。これらの3つすべてを実行できる既存のツールはありますか?FEXTRAフィールドとFCOMMENTフィールドを持つgzipファイルを作成する方法

+0

スタックオーバーフローは、プログラミングおよび開発の質問のサイトです。この質問は、プログラミングや開発に関するものではないので、話題にはならないようです。ヘルプセンターの[ここではどのトピックを参照できますか](http://stackoverflow.com/help/on-topic)を参照してください。おそらく、[Super User](http://superuser.com/)や[Unix&Linux Stack Exchange](http://unix.stackexchange.com/)の方が良いかもしれません。 – jww

+1

Crypto ++ライブラリは、[Gzip class](https://www.cryptopp.com/wiki/Gzip)の3つのフィールドをすべて尊重します。 [Super User](http://superuser.com/)の[Gzipは、解凍時に元のファイル名を保持すると思われますか?](https://superuser.com/q/859785/173513)も参照してください。多くの(ほとんどの)ツールは、文字セットの問題のためにデフォルトでファイル名を尊重しません。 – jww

+0

@jww説明を読み直してください。 Gzipは、FNAMEフィールドの設定のみをサポートしています。私が書いているプログラムもFEXTRAとFCOMMENTフィールドを解析する必要がありますが、これらのフィールドを持つgzipでテストファイルを作成できない場合、これらのフィールドをテストすることはできません。 [RFCを参照](http://www.zlib.org/rfc-gzip.html#specification) – mmstick

答えて

2

PerlモジュールIO::Compress::Gzipは、必要に応じて、あなたがでintrestedている三つのフィールドを設定することができます(フェア開示:私はモジュールの作者だ)。ここで

」は、FNAMEを設定し、いくつかのサンプルコードですファイル名 "、FCOMMENTを"これはコメントです "とし、FEXTRAフィールドにID" ab "と値" cde "の1つのサブフィールドを作成します。

use IO::Compress::Gzip qw(gzip $GzipError); 

gzip \"payload" => "/tmp/test.gz", 
    Name  => "filename", 
    Comment => "This is a comment", 
    ExtraField => [ "ab" => "cde"] 
    or die "Cannot create gzip file: $GzipError" ; 

ここで作成したファイルの16進数です。

00000000 1f 8b 08 1c cb 3b 3a 5a 00 03 07 00 61 62 03 00 |.....;:Z....ab..| 
00000010 63 64 65 66 69 6c 65 6e 61 6d 65 00 54 68 69 73 |cdefilename.This| 
00000020 20 69 73 20 61 20 63 6f 6d 6d 65 6e 74 00 2b 48 | is a comment.+H| 
00000030 ac cc c9 4f 4c 01 00 15 6a 2c 42 07 00 00 00  |...OL...j,B....| 
0000003f 
+0

この機能をサポートしている実際のユーティリティ(例:gzip)があればいいと思います。悲しいことに、ghexで生成されたgzipファイルを開いて、統合テストを作成するために直接16進数のデータを変更する必要がありました。それにもかかわらず、私のC/Rustプログラムは、これらのヘッダーを正しく読み取っています。 – mmstick

関連する問題