Création d'une archive ZIP en mémoire à l'aide de System.IO.Compression : surmonter l'erreur ZIP non valide
Lors de la tentative de création d'une archive ZIP dans mémoire à l'aide d'un MemoryStream, vous pouvez rencontrer le problème où l'archive est créée mais n'a pas le contenu souhaité. Ce problème est dû à la nécessité d'écrire les derniers octets, tels que les sommes de contrôle, dans l'archive pour la compléter.
Pour résoudre ce problème, vous pouvez utiliser le code modifié suivant :
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); } }
La principale différence ici réside dans le troisième paramètre du constructeur ZipArchive, qui est défini sur true. Ce paramètre indique que le ZipArchive peut être supprimé sans fermer le flux sous-jacent. Cela vous permet de réutiliser le MemoryStream après avoir créé l'archive.
En utilisant le code modifié, vous pouvez réussir à créer une archive ZIP en mémoire avec le contenu souhaité, même en utilisant un MemoryStream. Cette flexibilité vous permet de manipuler les archives dans divers scénarios sans avoir besoin de manipulation de fichiers intermédiaire.
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!