經過一番研究(約1天)後,我意識到我需要一些幫助PLZ。C#在內存中解壓縮.EXE文件
我的問題要解決:
我想解壓一個.exe
文件,但我不能把結果寫入到磁盤(這是一個約束)。
我需要記住這一個,例如在Stream
類或甚至字符串類。
只是爲了完成我的問題:
- 我不知道哪個工具被用來生成它。
- .Net框架4.5
我試了一下:
我用
Process
類,但有一個驗證步驟,我想這樣做,在後臺我嘗試探索GZip/ZipFile類,但這是一個失敗
感謝您的回答。
經過一番研究(約1天)後,我意識到我需要一些幫助PLZ。C#在內存中解壓縮.EXE文件
我的問題要解決:
我想解壓一個.exe
文件,但我不能把結果寫入到磁盤(這是一個約束)。
我需要記住這一個,例如在Stream
類或甚至字符串類。
只是爲了完成我的問題:
我試了一下:
我用Process
類,但有一個驗證步驟,我想這樣做,在後臺
我嘗試探索GZip/ZipFile類,但這是一個失敗
感謝您的回答。
如果你能建立在.NET框架4.5或更高版本,使用類從System.IO.Compression
(記得要參考在項目級別添加到System.IO.Compression
和System.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"
Thx爲您提供幫助,但是當我使用此方法時,我獲得:未找到中央目錄簽名末尾的異常。 –
在這種情況下,您的.exe很可能不是一個自解壓zip壓縮文件,或者以某種方式損壞,我無法進一步幫助您。要確認,看看你是否可以用WinRAR或其他歸檔應用程序打開.exe文件。 –
我可以用我的7zip打開它,當我手動進行提取時,它工作正常 –
你只是試圖解壓縮它,還是試圖執行它? –
我只是想解壓縮到內存中,需要內部的人(txt文件) –
你看過第三方庫,比如SharpZipLib嗎? –