Maison >développement back-end >C++ >Puis-je créer une archive ZIP en mémoire à l'aide de MemoryStream sans utiliser FileStream ?
Création d'une archive ZIP en mémoire à l'aide de MemoryStream
En essayant de créer une archive ZIP en mémoire à l'aide d'un MemoryStream, les utilisateurs peuvent rencontrer un scénario dans lequel le fichier d'archive est généré mais ne contient pas le fichier de contenu prévu. Le remplacement du MemoryStream par un FileStream résout le problème. Cependant, est-il possible d'utiliser un MemoryStream pour la création d'archives ZIP sans recourir à un FileStream ?
La solution réside dans la compréhension du fonctionnement interne de ZipArchive. Avant que l'archive puisse être considérée comme complète, certains octets cruciaux, comme les sommes de contrôle, doivent être écrits. Par défaut, ZipArchive ferme le flux pour effectuer cette opération, mais dans le cas d'un MemoryStream, cette action empêche l'utilisation ultérieure du flux.
Pour pallier à cela, le troisième paramètre de ZipArchive peut être fixé à true, ce qui permet l'écriture des derniers octets sans fermer le flux. Le code révisé ci-dessous illustre cette approche :
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 incorporant cet ajustement, les utilisateurs peuvent créer avec succès des archives ZIP en mémoire à l'aide de MemoryStream sans compromettre l'intégrité ou l'exhaustivité de l'archive.
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!