0

こんにちは、GZipStream を使用してファイルを圧縮しようとしています。

独自の拡張機能を作成しました。それを .myextension と呼びましょう

.myextension を圧縮して、その拡張子を保持しようとしています。つまり、.myextension を同じ拡張子に圧縮しようとしています。例: myfile.myextension があり、それを myfile.myextension に圧縮したいと考えています。できます。ファイルを非常にうまく圧縮できます。

問題は、GZipStream を使用して解凍しようとすると、マジック ナンバーが正しくないと表示されることです。

どうすれば修正できますか?解凍するときは、拡張子を .gz に変更すればよいですか? どうにかして変換する必要がありますか?続行する方法がわからないので、助けてください。

4

2 に答える 2

1

これはよくある質問です。同様のスレッドに解決策を提供したいと思います。

http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=427166&SiteID=1

「マジック ナンバー」は通常、固定値であり、しばしば恣意的で、解読できない可能性があります。たとえば、コード行には次のようなものがあります。

If X = 31 then
    'Do Something
End If

この場合、31 は「マジック ナンバー」です。明確な意味はありません (コーディングに関する限り、嘲笑の言葉です)。

(さまざまな種類の) ファイルは、多くの場合、最初の数バイトが特定の値に設定されています。たとえば、最初の 2 バイトが 16 進数 42 4D であるファイルはビットマップ ファイルです。これらの数字は「マジック ナンバー」です (この場合、42 4D は文字 BM に対応します)。他のファイルにも同様の「マジック ナンバー」があります。

http://forums.microsoft.com/msdn/showpost.aspx?postid=1154042&siteid=1

もちろん、誰か (チーム) が、zip、bzip2、gzip、rar、cab、jar、data、および iso ファイルをサポートする簡単な圧縮/解凍カスタム タスクを開発した瞬間、私はそれを使用します。オープンソースのコマンド ライン ユーティリティを使用します。

もちろん、解決策をコード化することはできますが、これは非常に簡単な方法です。zip ファイルを処理するためのネイティブ .NET ライブラリはありません (少なくともまだ)。現在、zip ファイル内の圧縮ストリームを処理するためのサポートがありますが、アーカイブ自体をナビゲートすることはできません。

さて、前に述べたように、Sourceforge のようなオープンソースの zip ユーティリティがたくさんあります。これらは Win2003 Server x64 で問題なく動作します。私はそれを証明できます。

ただし、zip 解凍に .NET ソリューションに固執する場合は、オープン ソースであり、クリーンで信頼性の高い 100% .NET 実装を備えたhttp://www.icsharpcode.net/OpenSource/SharpZipLib/を使用してください。

于 2012-04-15T20:54:45.577 に答える
0

まず、さまざまな問題を抱えている他のユーザーから、GZipStream にはバグがあるので使用しないでください。短い文字列を正しく圧縮せず、破損した圧縮データを検出しません。これは非常に貧弱な実装です。

あなたの問題に関しては、GZipStreamを使用している他の人は、圧縮されていないバイト数であるgzipデータへの4バイトのプレフィックスを確認します。それがファイルに書き込まれると、問題が発生します。gzip ファイルは 16 進バイトで始まる必要があります1f 8b

于 2012-04-16T04:12:34.423 に答える