将zip文件保存到列表中

本文关键字:列表 保存 zip 文件 | 更新日期: 2023-09-27 18:17:23

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

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

zip.GetEntry(path).Open()

zip文件正确打开,如果我用ExtractToFile替换Open,并尝试将图片提取到文件夹中,它可以正常工作。

但是当我尝试将图片主体保存到列表中时,作为一个流,它不起作用:

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

图片超过2MB大,但是当我序列化列表时,它只有2kb。我哪里做错了?

将zip文件保存到列表中

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