经过一些研究(大约1天),我意识到我需要一些帮助。
我要解决的问题:
我试图解压缩.exe
文件,但我无法将结果写入磁盘(这是一个约束)。
我需要将这一个保留在内存中,例如在Stream
类或甚至字符串类中。
刚刚完成我的问题:
我尝试了什么:
我使用了Process
类,但有一个验证步骤,我想在后台执行此操作
我尝试探索GZip / ZipFile类,但这是一次失败
感谢您的回答。
答案 0 :(得分:1)
如果您可以在.NET Framework 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的完整路径传递给函数即可。
第二个参数是归档中文本文件的名称/路径。因此,如果文本文件位于存档根目录中,那么它只是例如&#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!");
}
}
}