GZip头部中的魔数不正确。确保您传入的是一个GZip流(.exe文件)。

7
我想解压一个exe文件,该文件包含一些文件和文件夹。当我尝试使用WinRAR提取文件时,它可以被提取出来,但是当我尝试使用一些示例来提取exe文件时,我会收到以下错误信息:
“GZip头中的魔数不正确,请确保您正在传递GZip流。”
我已经尝试了一些示例并进行了大量搜索,但没有找到答案,我还使用了一些库。
我尝试了以下代码,但仍然出现相同的错误:
    public static void Decompress(FileInfo fi)
    {
        // Get the stream of the source file.
        using (FileStream inFile = fi.OpenRead())
        {
            // Get original file extension, for example
            // "doc" from report.doc.gz.
            string curFile = fi.FullName;
            string origName = curFile.Remove(curFile.Length -
                    fi.Extension.Length);

            //Create the decompressed file.
            using (FileStream outFile = File.Create(origName))
            {
                using (GZipStream Decompress = new GZipStream(inFile,
                        CompressionMode.Decompress))
                {
                    // Copy the decompression stream 
                    // into the output file.
                    Decompress.CopyTo(outFile);

                    Console.WriteLine("Decompressed: {0}", fi.Name);

                }
            }
        }
    }

2
那是因为.exe文件不是有效的.gzip文件,但包含一个gzip文件。它是可执行文件。Winrar显然能够在其中找到.gzip(因为它可以创建这样的可执行文件,它知道其布局并且可以读取它)。请注意,并非每个.exe文件都是自解压缩归档文件。 - John Dvorak
那我应该怎么做呢?你能给我一些示例代码吗?如果你能帮助我,我会非常感激的。@JanDvorak - Mohd Zubair
我希望我能够帮忙,但我不能保证结果。我可以为您搜索一些信息。 - John Dvorak
1个回答

4
那是因为.exe文件是一个自解压缩的存档文件... 你应该试试DotNetZip。从该项目的常见问题中得知:这个库可以读取自解压缩的zip文件吗? 是的。DotNetZip可以读取WinZip生成的自解压缩存档(SFX),而WinZip可以读取DotNetZip生成的SFX文件。你可以轻松地从Nuget安装它

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接