2012-01-27 33 views
1

FileUploadコントロールでzipファイル(winrarで圧縮)をサーバーにアップロードしています。アップロードしたファイルの解凍:GZipヘッダーのマジックナンバーが正しくありません。 GZipストリームを渡していることを確認してください

HttpPostedFile myFile = FileUploader.PostedFile; 

      using (Stream inFile = myFile.InputStream) 
      { 
       using (GZipStream decompress = new GZipStream(inFile, CompressionMode.Decompress)) 
       { 
        StreamReader reader = new StreamReader(decompress); 
        string text = reader.ReadToEnd(); // Here is an error 
       } 
      } 

しかし、私はエラーを取得する:私は、ファイルを解凍するために、このコードを使用して、サーバー上

gzipヘッダ中のマジックナンバーが正しくありません。 GZipストリームを渡していることを確認してください

これを修復する方法はありますか? .NET 2.0

を使用してイムは、ヘルプ

+0

GZipでZIPファイルの解凍をどのように行うと思いますか? – leppie

答えて

4

ZIPおよびGZIPいただき、誠にありがとうござい全く同じではありません。 #ziplibのようなサードパーティライブラリを使用して、ZIPファイルの解凍を行うことができます。

3

GZipは、指定されたストリームを別のストリームに圧縮するフォーマットです。ファイルと一緒に使用する場合、通常は.gzという拡張子とcontent-typeのapplication/x-gzipが与えられます(しかし、多くの場合、含まれているストリームのコンテンツタイプとg-zippedを示す別の手段を使用します)。ウェブ上では、コンテンツのエンコードや、ダウンロードとアップロードの時間を「目に見えないほど」減らすために、トランスコードをエンコードする(あまりうまくサポートされていないことが多い)(ユーザーは、 HTMLページが実際にダウンロードされるのは、それより小さなGZipです)。

ジップは、1つ以上のファイルのアーカイブと、相対パスに関する情報を圧縮する形式です。生成されるファイルには通常、拡張子が.zip、内容タイプがapplication/zip(IANAに登録されています)が与えられます。

一般的にDEFLATEアルゴリズムを使用している場合と同様に、名前とは明確な類似点があります。また、GzipとTarを組み合わせてZipと同様のアーカイブを作成できます彼らは異なる用途を持っています。

次の2つのオプションが持っている:(とにかく、物事のプログラミング側から)

最も単純なのgzipファイルを作成し、Windowsのツールを取得することです(WinRARのは、開くが、それらを作成していないが、数十がありますそれらを作成するツールは無料です)。その後、あなたのコードが動作します。

もう1つはPackage Classです。潜在的に複数のファイルのパッケージは、本質的に1つのファイルよりも複雑ですが、どんな手段でも恐ろしいものではないので、使用するのが少し複雑です。これにより、Zipファイルを調べたり、含まれているファイルを抽出したり、変更したりすることができます。

関連する問題