2012-04-15 19 views
0

こんにちはGZipStreamを使用してファイルを圧縮しようとしています。C#でファイルを正しく解凍できません。

私は自分の拡張を作成している、のは、私は.myextensionを圧縮し、その拡張子を維持しようと.myextension

それを呼びましょう。私は.myextensionを同じ拡張子に圧縮しようとしています。例:私はmyfile.myextensionと をmyfile.myextensionに圧縮したいと思います。できます。私は本当によくファイルを圧縮することができます。

問題は、GZipStreamを使用して解凍しようとすると、マジックナンバーが間違っているということです。

どうすれば修正できますか?解凍すると、拡張子を.gzに変更するだけですか?私は何とかそれを変換する必要がありますか?私はどのように続行するのか分かりません。

+1

これは、ファイル拡張子とは関係ありません。 7-zipなどのアプリケーションを使用して圧縮ファイルを解凍できますか?はいの場合、解凍コードにエラーが含まれている可能性があります。コードを投稿してください。 – Yogu

+1

ファイル名の拡張子とは関係ありません。より良いブレッドクラムを残す必要があります。 –

+0

拡張子はまったく問題ではありません。バイト[]の代わりに解凍前にファイルを文字列に読み込みますか?解凍のいくつかのコードを表示 –

答えて

1

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

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

「マジックナンバー」は、通常は固定値であり、そして多くの場合、おそらく解読不能、ややarbitary登場します。例えば、コードの行を有することができる:この場合

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

、分誰か(チームが)、郵便番号、BZIP2、GZIP、RAR、タクシー、瓶、DAAおよびISOファイルをサポートしていない大騒ぎ圧縮/解凍カスタムタスクを開発I'LLその時まで、私はオープンソースのコマンドラインユーティリティに固執します。

もちろん、ソリューションをコーディングすることはできますが、これはあまりにも低い垂木です。 zipファイルを扱うために、ネイティブの.NETライブラリはありません(少なくとも未だありません)。現在は、圧縮されたストリームをzipファイル内で扱いますが、アーカイブ自体をナビゲートすることはサポートされていません。

これまでのように、sourceforgeのようなオープンソースのzipユーティリティがたくさんあります。これらはWin2003 Server x64上で正常に動作します。私はそれを証明することができます。

しかし、Zip解凍用の.NETソリューションを強く求めている場合は、オープンソースであり、きれいで信頼性の高い100%.NET実装を持つhttp://www.icsharpcode.net/OpenSource/SharpZipLib/を使用してください。

0

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

あなたの問題については、GZipStreamを使用している他の人は、圧縮されていないバイト数であるgzipデータの4バイトのプレフィックスを参照しています。それがファイルに書き込まれている場合、それはあなたが見ている問題を引き起こすでしょう。 gzipファイルは16進数のバイト1f 8bで始まる必要があります。

関連する問題