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
  •  | 
  •  

質問

.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?

役に立ちましたか?

解決

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.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top