如何通过使用C#.NET 4.5将文件从ZIP存档读取到内存而不将其首先解压缩到文件中?

.NET Framework 4.5通过System.IO.Compression类添加了对ZIP文件的支持。

假设我的.ZIP存档在根目录中有sample.xml文件。 我想直接从存档到内存流读取此文件,然后将其反序列化为自定义.NET对象。 做这个的最好方式是什么?

改编自ZipArchiveXmlSerializer.Deserialize()手册页。

ZipArchiveEntry类有一个Open()方法,它返回一个流到该文件。

 string zipPath = @"c:\example\start.zip"; using (ZipArchive archive = ZipFile.OpenRead(zipPath)) { var sample = archive.GetEntry("sample.xml"); if (sample != null) { using (var zipEntryStream = sample.Open()) { XmlSerializer serializer = new XmlSerializer(typeof(SampleClass)); SampleClass deserialized = (SampleClass)serializer.Deserialize(zipEntryStream); } } } 

请注意, 如MSDN中所述 ,您需要添加对.NET程序集System.IO.Compression.FileSystem的引用才能使用ZipFile类。