How to read file from ZIP archive to memory without extracting it to file first, by using C# .NET 4.5?

StackOverflow https://stackoverflow.com/questions/20520238

  •  31-08-2022
  •  | 
  •  

Question

.NET Framework 4.5 added support for ZIP files via classes in System.IO.Compression.

Let's say I have .ZIP archive that has sample.xml file in the root. I want to read this file directly from archive to memory stream and then deserialize it to a custom .NET object. What is the best way to do this?

Was it helpful?

Solution

Adapted from the ZipArchive and XmlSerializer.Deserialize() manual pages.

The ZipArchiveEntry class has an Open() method, which returns a stream to the file.

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);
        }
    }
} 

Note that, as documented on MSDN, you need to add a reference to the .NET assembly System.IO.Compression.FileSystem in order to use the ZipFile class.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top