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

mat*_*i82 8 .net c# zip archive

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

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

Cod*_*ter 15

改编自手册页ZipArchive和XmlSerializer.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);
        }
    }
} 
Run Code Online (Sandbox Code Playgroud)

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