Maison > développement back-end > C++ > Comment éviter les entrées vides lors de la création d'une archive ZIP en mémoire avec MemoryStream ?

Comment éviter les entrées vides lors de la création d'une archive ZIP en mémoire avec MemoryStream ?

Linda Hamilton
Libérer: 2025-01-07 00:13:50
original
966 Les gens l'ont consulté

How to Avoid Empty Entries When Creating an In-Memory ZIP Archive with MemoryStream?

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);
    }
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal