Магическое число в заголовке GZip неверно. Убедитесь, что вы передаете поток GZip (файл .exe).

Я хочу извлечь exe-файл. Файл 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);

                }
            }
        }
    }

person Mohd Zubair    schedule 28.10.2012    source источник
comment
Это связано с тем, что файл .exe не является действительным файлом .gzip, но содержит его. Это исполняемый файл. Winrar, по-видимому, может найти .gzip внутри (потому что он может создать такой исполняемый файл, он знает его макет и может его прочитать). Обратите внимание, что далеко не каждый файл .exe является самораспаковывающимся архивом.   -  person John Dvorak    schedule 28.10.2012
comment
так что мне делать, можете ли вы дать мне пример кода, пожалуйста, я был бы очень признателен, если бы вы могли мне помочь @JanDvorak   -  person Mohd Zubair    schedule 28.10.2012
comment
Если бы я мог. Я могу немного поискать для вас, но я не могу дать никаких гарантий.   -  person John Dvorak    schedule 28.10.2012


Ответы (1)


Это потому, что файл .exe является самораспаковывающимся архивом...

Вам следует попробовать DotNetZip. Из FAQ проекта:

Читает ли эта библиотека самораспаковывающиеся ZIP-файлы?

Да. DotNetZip может читать самораспаковывающиеся архивы (SFX), созданные WinZip, а WinZip может читать файлы SFX, созданные DotNetZip.

Вы можете легко установить его из Nuget.

person Yannick Blondeau    schedule 29.10.2012