将zip文件保存到列表中
本文关键字:列表 保存 zip 文件 | 更新日期: 2023-09-27 18:17:23
我有一个列表,我想在其中保存几张图片,然后我将该列表二进制序列化到一个文件中。
我从zip文件中获取图片,像这样:
zip.GetEntry(path).Open()
zip文件正确打开,如果我用ExtractToFile替换Open,并尝试将图片提取到文件夹中,它可以正常工作。
但是当我尝试将图片主体保存到列表中时,作为一个流,它不起作用:
List.Add(zip.GetEntry(path).Open());
图片超过2MB大,但是当我序列化列表时,它只有2kb。我哪里做错了?
ZipArchiveEntry.Open()返回一个流。
你需要在代码的某处使用stream . read(…)方法读取流
如果你想,你可以保存一个流列表,只要你在导出数据时读取它们。流本身不是数据,它允许你读取它
不能直接序列化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