Comment lire un fichier d’archive ZIP dans la mémoire sans l’extraire dans un fichier en utilisant C # .NET 4.5

.NET Framework 4.5 a ajouté la prise en charge des fichiers ZIP via les classes de System.IO.Compression .

Disons que j’ai une archive .ZIP qui a sample.xml fichier sample.xml à la racine. Je souhaite lire ce fichier directement depuis l’archive vers le stream de mémoire, puis le désérialiser en un object .NET personnalisé. Quelle est la meilleure façon de procéder?

Adapté des pages de manuel ZipArchive et XmlSerializer.Deserialize() .

La classe ZipArchiveEntry a une méthode Open() , qui renvoie un stream au fichier.

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

Notez que, comme documenté sur MSDN , vous devez append une référence à l’assembly .NET System.IO.Compression.FileSystem afin d’utiliser la classe ZipFile .