0

みなさんこんにちは、私はこの例外を受けています:

The magic number in GZip header is not correct. Make sure you are passing in a GZip stream.

私が行ったのは、ファイルを GZip に解凍し、それをストリームに渡し、それをファイルに渡すことだけです。

using (FileStream fInStream = new FileStream(@"C:\Users\UNI\Desktop\FrostbyteDBUpdateProgram\FrostbyteDBUpdateProgram\bin\Debug\" + fileName, FileMode.Open, FileAccess.Read))
        {
            using (GZipStream gZip = new GZipStream(fInStream, CompressionMode.Decompress))
            {
                using (FileStream fOutStream = new FileStream(@"C:\Users\UNI\Desktop\FrostbyteDBUpdateProgram\FrostbyteDBUpdateProgram\bin\Debug\test1.docx", FileMode.Create, FileAccess.Write))
                {
                    byte[] tempBytes = new byte[4096];
                    int i;
                    while ((i = gZip.Read(tempBytes, 0, tempBytes.Length)) != 0)
                    {
                        fOutStream.Write(tempBytes, 0, i);
                    }
                }
                gZip.Close();
            }
            fInStream.Close();
        }
4

1 に答える 1

3

GZipStream クラスは、.gz または .zip 形式の圧縮アーカイブの読み取りには適していません。データを解凍/圧縮する方法を知っているだけで、アーカイブ ファイルの構造については何も知りません。これには複数のファイルが含まれる可能性があります。クラスには、解凍するアーカイブ内の特定のファイルを選択する方法がないことに注意してください。

Zip アーカイブのサポートは、.NET 4.5 で追加されます。それまでは、人気のある SharpZipLib または DotNetZip ライブラリを使用できます。その名前を Google で検索して、ダウンロードを見つけます。

解凍したいファイルが実際に GZipStream によって生成されたものである場合、それを行ったコードにバグがあり、それを確認することはできません。

于 2012-06-30T10:40:27.830 に答える