Maison >développement back-end >C++ >Comment créer correctement une archive ZIP en mémoire à l'aide de MemoryStream et System.IO.Compression ?

Comment créer correctement une archive ZIP en mémoire à l'aide de MemoryStream et System.IO.Compression ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-07 00:30:39655parcourir

How to Properly Create a ZIP Archive in Memory Using MemoryStream and System.IO.Compression?

Utilisation de MemoryStream pour créer une archive ZIP en mémoire avec System.IO.Compression

En essayant de créer une archive ZIP à l'aide d'un MemoryStream, vous pouvez rencontrer un problème où l'archive est générée mais le fichier souhaité est manquant. En effet, ZipArchive nécessite l'écriture des derniers octets pour être terminé. Pour résoudre ce problème :

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

Passer "true" comme troisième paramètre à ZipArchive vous permet de continuer à utiliser le flux après avoir appelé Dispose, en garantissant que toutes les informations nécessaires sont écrites dans 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