2012-10-28 10 views
6

Voglio estrarre un file exe. Il file exe contiene alcuni file e cartelle. Quando cerco di estrarre il file utilizzando winrar esso viene estratto, ma quando sto cercando di estrarre il file exe utilizzando alcuni esempi sto ottenendo questo errore:Il numero magico nell'intestazione GZip non è corretto. Assicurati di passare in un flusso GZip. (File exe)

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

Ho usato alcuni campioni e googled molto per il mio problema ma non ho avuto la mia risposta, e ho anche usato alcune librerie.

Ho usato questo codice, ma lo stesso errore:

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

Questo perché il file .exe _non è un file .gzip valido, ma _ contiene uno. È un file eseguibile. Winrar è apparentemente in grado di trovare il .gzip all'interno (perché può creare un tale eseguibile, conosce il suo layout e può leggerlo). Si noti che di gran lunga non ogni file .exe è un archivio autoestraente. –

+0

quindi cosa dovrei fare puoi darmi un esempio di codice per favore, ci sarebbe un grande apprezzamento se tu puoi aiutarmi @JanDvorak –

+0

Vorrei poterlo fare. Potrei farti qualche ricerca ma non posso dare alcuna garanzia. –

risposta

4

Questo perché il file .exe è un archivio autoestraente ...

si dovrebbe dare DotNetZip una prova. Dalle domande frequenti del progetto:

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.

È possibile install it from Nuget facilmente.