Saltar al contenido

ZipArchive crea un archivo ZIP no válido

Recuerda que en las ciencias informáticas un error casi siempre tiene diferentes resoluciones, pero aquí mostraremos lo mejor y más óptimo.

Solución:

Encontré el error, en retrospectiva, obvio, en mi código. El ZipArchive tiene que ser dispuesto para que escriba su contenido en su flujo subyacente. Así que tuve que guardar la transmisión en un archivo después del final del bloque de uso de ZipArchive.
Y era importante establecer el dejar abierto argumento de su constructor para true, para que no cierre la secuencia subyacente. Así que aquí está la solución de trabajo completa:

using (MemoryStream zipStream = new MemoryStream())

    using (ZipArchive zip = new ZipArchive(zipStream, ZipArchiveMode.Create, true))
    
        var entry = zip.CreateEntry("test.txt");
        using (StreamWriter sw = new StreamWriter(entry.Open()))
        
            sw.WriteLine(
                "Etiam eros nunc, hendrerit nec malesuada vitae, pretium at ligula.");
        
    

    var file = await Windows.Storage.ApplicationData.Current.LocalFolder.CreateFileAsync(
        "test.zip",
        CreationCollisionOption.ReplaceExisting);

    zipStream.Position = 0;
    using (Stream s = await file.OpenStreamForWriteAsync())
    
        zipStream.CopyTo(s);
    

En todos sus Objetos de flujo, debe rebobinar los flujos desde el principio para que otras aplicaciones los lean correctamente utilizando el método .Seek.

Ejemplo:

zipStream.Seek(0, SeekOrigin.Begin);

Si aceptas, eres capaz de dejar una reseña acerca de qué le añadirías a este escrito.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *