web-dev-qa-db-fra.com

Lire Zip ionique sous forme de flux de mémoire C #

J'utilise Ionic.Zip pour extraire ZipFile dans un flux de mémoire avec cette méthode:

private MemoryStream GetReplayZipMemoryStream()
{
    MemoryStream zipMs = new MemoryStream();
    using (ZipFile Zip = ZipFile.Read(myFile.Zip))
    {
        foreach (ZipEntry zipEntry in Zip)
        {
            if (zipEntry.FileName.StartsWith("Aligning") || zipEntry.FileName.StartsWith("Sensing"))
            {
                zipEntry.Extract(zipMs);
            }
        }
    }

    zipMs.Seek(0, SeekOrigin.Begin);
    return zipMs;
}

Une fois l'extraction terminée, je souhaite lire les flux et obtenir certaines des entrées en fonction du nom de fichier. Comment puis je faire ça?

J'ai essayé en appelant avec le code ci-dessous, mais je reçois une erreur sur le ZipFile.Read(ms) qui disait: 

Impossible de lire cela comme un ZipFile

Stream ms = GetReplayZipMemoryStream();
using (ZipFile Zip = ZipFile.Read(ms))
{
    ZipEntry imageEntry = Zip.Entries.First(x => x.FileName.EndsWith(".png"));
    using (Stream s = imageEntry.OpenReader())
    {
        var image = Image.FromStream(s);
        pictureBox1.Image = image;
    }
}

Merci d'avance pour votre aide!

10
Chocomelks

C'est peut-être une question un peu ancienne et une réponse tardive, mais j'ai fait quelque chose pour obtenir les fichiers sous forme de collections d'octets et leurs noms de fichier comme celui-ci.

public static Dictionary<string, byte[]> Decompress(Stream targFileStream)
{
    Dictionary<string, byte[]> files = new Dictionary<string, byte[]>();

    using(ZipFile z = ZipFile.Read(targFileStream))
    {
        foreach (ZipEntry zEntry in z)
        {
            MemoryStream tempS = new MemoryStream();
            zEntry.Extract(tempS);

            files.Add(zEntry.FileName, tempS.ToArray());
        }
    }

    return files;
}
12
Muhammad Nour

@ HenkHolerman a raison, vous n'avez plus de fichier Zip à ce stade. Vous voudrez peut-être envisager d'extraire le contenu du fichier Zip dans un répertoire temporaire, puis de l'exploiter sur les fichiers image via le système de fichiers.

0
Josh Newton