Création d'une archive ZIP en mémoire avec MemoryStream : surmonter le problème d'entrée vide
Lors de la tentative de création d'une archive ZIP en mémoire à l'aide d'un MemoryStream , les développeurs ont rencontré un problème particulier : l'archive créée contient un fichier vide même si le fichier texte correspondant est écrit. Ce comportement est attribué à une étape manquante dans le processus.
Pour résoudre ce problème, la clé est d'appeler Dispose sur l'objet ZipArchive avant de tenter d'accéder à son flux sous-jacent. Cette pratique est nécessaire car ZipArchive écrit les derniers octets dans la somme de contrôle de l'archive, la rendant ainsi complète. Cependant, si nous voulons que le flux reste ouvert pour une utilisation ultérieure, nous devons transmettre true comme troisième paramètre à ZipArchive.
Voici un extrait de code révisé qui intègre cette solution :
using (var memoryStream = new MemoryStream()) { using (var archive = new ZipArchive(memoryStream, ZipArchiveMode.Create, true)) { var demoFile = archive.CreateEntry("foo.txt"); using (var entryStream = demoFile.Open()) using (var streamWriter = new StreamWriter(entryStream)) { streamWriter.Write("Bar!"); } } using (var fileStream = new FileStream(@"C:\Temp\test.zip", FileMode.Create)) { memoryStream.Seek(0, SeekOrigin.Begin); memoryStream.CopyTo(fileStream); } }
En suivant cette approche, les développeurs peuvent réussir à créer une archive ZIP complète en mémoire à l'aide d'un MemoryStream, sans rencontrer le problème des entrées vides.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!