2012-10-28 33 views
6

Chcę wyodrębnić plik exe. Plik exe zawiera niektóre pliki i foldery. Kiedy próbuję rozpakować plik za pomocą WinRAR to zostanie wyodrębniony, ale gdy próbuję wyodrębnić plik exe stosując kilka przykładów Dostaję taki błąd:Magiczna liczba w nagłówku GZip jest niepoprawna. Upewnij się, że przekazujesz strumień GZip. (Plik exe)

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

użyłem kilka próbek i google dużo dla mojego problemu ale nie dostałem odpowiedzi, a także korzystałem z niektórych bibliotek.

Użyłem tego kodu, ale ten sam błąd:

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

To dlatego, że plik .exe _jest niepoprawny .gzip, ale _contains_ jeden. Jest to plik wykonywalny. Winrar najwyraźniej jest w stanie znaleźć .gzip wewnątrz (ponieważ może stworzyć taki plik wykonywalny, zna jego układ i może go odczytać). Należy zauważyć, że zdecydowanie nie każdy plik .exe jest samorozpakowującym się archiwum. –

+0

Więc co powinienem zrobić, daj mi przykładowy kod, byłoby wielkie uznanie, gdybyś mógł mi pomóc @JanDvorak –

+0

Chciałbym móc. Mogę poszukać, ale nie mogę dać żadnej gwarancji. –

Odpowiedz

4

To dlatego, że plik .exe jest archiwum samorozpakowujące ...

Należy dać DotNetZip spróbować. Z projektu FAQ:

Does this library read self-extracting zip files?

Yes. DotNetZip can read self-extracting archives (SFX) generated by WinZip, and WinZip can read SFX files generated by DotNetZip.

Możesz łatwo install it from Nuget.