将zip文件条目保存到列表中

时间:2014-08-10 13:17:40

标签: c#

我有一个List,我想将几​​张图片保存到其中,然后我将二进制序列化该列表到文件中。

我从这样的zip文件中获取图片:

zip.GetEntry(path).Open()

zip文件正确打开,如果我用ExtractToFile替换Open并尝试将图片解压缩到一个文件夹中,它没有任何问题。

但是当我尝试将图片的正文保存到列表中时,作为流,它不起作用:

List.Add(zip.GetEntry(path).Open());   

图片大小超过2MB,但当我序列化列表时,它只有2千字节。 我在这做错了什么?

2 个答案:

答案 0 :(得分:3)

ZipArchiveEntry.Open()返回一个流。

您需要在代码中的某处使用Stream.Read(...)方法阅读流。

只要您想要导出数据读取,就可以保存流列表。 流本身不是数据,它允许您阅读它。

答案 1 :(得分:1)

您无法直接序列化Stream对象。您应该首先将Read内容放入byte[],然后序列化该数组。

首先更改您的List

List<byte[]> List = new List<byte[]>();

然后将流读入此列表。由于压缩流不支持Length属性,因此使用MemoryStream作为缓冲区更为简单:

using (MemoryStream ms = new MemoryStream())
{
    zip.GetEntry(path).Open().CopyTo(ms);
    List.Add(ms.ToArray());
}

最后序列化List