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 格式的压缩档案。它只知道如何解压缩数据,对存档文件结构一无所知。其中可以包含多个文件,请注意该类如何无法选择要解压缩的存档中的特定文件。

.NET 4.5 中将添加 Zip 存档支持。在此之前,您可以使用流行的 SharpZipLib 或 DotNetZip 库。谷歌他们的名字找到下载。

如果您要解压缩的文件实际上是由 GZipStream 生成的,那么执行该操作的代码中有一个错误,我们看不到它。

于 2012-06-30T10:40:27.830 回答