Maison >développement back-end >C++ >Puis-je créer une archive ZIP en mémoire à l'aide de MemoryStream sans utiliser FileStream ?

Puis-je créer une archive ZIP en mémoire à l'aide de MemoryStream sans utiliser FileStream ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-07 00:18:47579parcourir

Can I Create a ZIP Archive in Memory Using MemoryStream Without Using 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn