将ionic Zip读取为内存流C#

将ionic Zip读取为内存流C#,c#,stream,zip,memorystream,C#,Stream,Zip,Memorystream,我正在使用Ionic.Zip使用以下方法将ZipFile提取到内存流: private MemoryStream GetReplayZipMemoryStream() { MemoryStream zipMs = new MemoryStream(); using (ZipFile zip = ZipFile.Read(myFile.zip)) { foreach (ZipEntry zipEntry in zip) {

我正在使用Ionic.Zip使用以下方法将ZipFile提取到内存流:

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;
}
提取完成后,我希望读取流并根据条目文件名获取一些条目。我该怎么做

我尝试用下面的代码调用,但在
ZipFile.Read(ms)
上出现错误,上面说:

无法将其作为ZipFile读取


提前感谢您的帮助

这可能是一个有点老的问题,回答得有点晚,但我已经做了一些事情,以字节集合的形式获取了这些文件,其文件名如下所示

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;
}
publicstaticdictionary解压(Stream-targetfilestream)
{
字典文件=新字典();
使用(ZipFile z=ZipFile.Read(targetfilestream))
{
foreach(z中的ZipEntry zEntry)
{
MemoryStream tempS=新的MemoryStream();
天顶提取物(tempS);
Add(zEntry.FileName,tempS.ToArray());
}
}
归还文件;
}

完成
.Extract()
后,数据(在mem流中)不再压缩。。。您有一系列串联的未压缩文件。正如Henk Holterman所建议的,除非您处理的是嵌套的zip文件,否则您不应该在第二个代码段中再次解压缩这些文件。您能提供您试图解压缩的文件的示例结构吗?或者,我建议您在第一个循环中进行所有过滤,甚至在那里创建图像,以避免将所有要读取的文件写入一个流。除了Henk所做的观察之外,我建议您无论如何不要使用Ionic.Zip来执行此操作。NET现在有了
ZipArchive
类,该类提供了处理.zip文件的内置功能,并且IMHO比您现在拥有的代码更方便。@PeterDuniho,但它似乎无法处理加密的zip文件。如果你不需要,我想最好用这个。谢谢。我一直在找这个。我没有看不同的virtualextract()函数。
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;
}