2015-07-20 103 views
2

經過一番研究(約1天)後,我意識到我需要一些幫助PLZ。C#在內存中解壓縮.EXE文件

我的問題要解決:

我想解壓一個.exe文件,但我不能把結果寫入到磁盤(這是一個約束)。

我需要記住這一個,例如在Stream類或甚至字符串類。

只是爲了完成我的問題:

  • 我不知道哪個工具被用來生成它。
  • .Net框架4.5

我試了一下:

  • 我用Process類,但有一個驗證步驟,我想這樣做,在後臺

  • 我嘗試探索GZip/ZipFile類,但這是一個失敗

感謝您的回答。

+0

你只是試圖解壓縮它,還是試圖執行它? –

+0

我只是想解壓縮到內存中,需要內部的人(txt文件) –

+0

你看過第三方庫,比如SharpZipLib嗎? –

回答

1

如果你能建立在.NET框架4.5或更高版本,使用類從System.IO.Compression(記得要參考在項目級別添加到System.IO.CompressionSystem.IO.Compression.FileSystem):

using System.IO.Compression; 
using System.IO; 

public static string GetTextfileFromZip(string zipFilepath, string txtFilename) 
{ 
    using (ZipArchive zipArchive = ZipFile.Open(zipFilepath, ZipArchiveMode.Read)) 
    { 
     ZipArchiveEntry entry = GetZipArchiveEntry(zipArchive, txtFilename); 
     using (Stream stream = entry.Open()) 
     { 
      using (StreamReader reader = new StreamReader(stream)) 
      { 
       return reader.ReadToEnd(); 
      } 
     } 
    } 
} 

public static ZipArchiveEntry GetZipArchiveEntry(ZipArchive zipArchive, string zipEntryName) 
{ 
    return zipArchive.Entries.First<ZipArchiveEntry>(n => n.FullName.Equals(zipEntryName)); 
} 

注意:如果你的存檔具有.EXE擴展名的自解壓存檔仍然有效。只需傳遞給exe函數的完整路徑即可。 第二個參數是存檔中文本文件的名稱/路徑。所以如果文本文件在檔案根目錄中,它將只是例如「file.txt」,否則,如果它在一個名爲sub的文件夾中,那麼參數應該是@"sub\file.txt"

+0

Thx爲您提供幫助,但是當我使用此方法時,我獲得:未找到中央目錄簽名末尾的異常。 –

+0

在這種情況下,您的.exe很可能不是一個自解壓zip壓縮文件,或者以某種方式損壞,我無法進一步幫助您。要確認,看看你是否可以用WinRAR或其他歸檔應用程序打開.exe文件。 –

+0

我可以用我的7zip打開它,當我手動進行提取時,它工作正常 –