我有一个List,我想将几张图片保存到其中,然后我将二进制序列化该列表到文件中。
我从这样的zip文件中获取图片:
zip.GetEntry(path).Open()
zip文件正确打开,如果我用ExtractToFile替换Open并尝试将图片解压缩到一个文件夹中,它没有任何问题。
但是当我尝试将图片的正文保存到列表中时,作为流,它不起作用:
List.Add(zip.GetEntry(path).Open());
图片大小超过2MB,但当我序列化列表时,它只有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
。