C#解压缩内存中的.EXE文件

时间:2015-07-20 14:43:18

标签: c# memory zip unzip

经过一些研究(大约1天),我意识到我需要一些帮助。

我要解决的问题:

我试图解压缩.exe文件,但我无法将结果写入磁盘(这是一个约束)。

我需要将这一个保留在内存中,例如在Stream类或甚至字符串类中。

刚刚完成我的问题:

  • 我不知道用于生成它的工具。
  • .Net Framework 4.5

我尝试了什么:

  • 我使用了Process类,但有一个验证步骤,我想在后台执行此操作

  • 我尝试探索GZip / ZipFile类,但这是一次失败

感谢您的回答。

2 个答案:

答案 0 :(得分:1)

如果您可以在.NET Framework 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的完整路径传递给函数即可。 第二个参数是归档中文本文件的名称/路径。因此,如果文本文件位于存档根目录中,那么它只是例如&#34; file.txt&#34;,否则如果它位于名为sub的文件夹中,则参数应为@"sub\file.txt"

答案 1 :(得分:0)

这是更简单的方法

using System;
using System.IO.Compression;

namespace zipReader
{
    class Program
    {
        static void Main(string[] args)
        {
            ZipFile.ExtractToDirectory("C:\\Temp\\D20190827.exe", "C:\\Temp\\");
            Console.WriteLine("Extract Done!");
        }       
    }
}