MemoryStream无法获得更新C#

时间:2017-02-28 07:35:19

标签: c#

早上好,

我需要你的帮助。

1。)我在我的应用程序中创建了来自数据库的二进制数组中的ZipArchive对象。

2。)在这些ZipArchive对象中,我应该删除某些文件。

3.)现在我必须将这些ZipArchive对象重新放回MemoryStream或作为byte []

这是我正在使用的代码:

foreach (var zip in fileList.Reverse())
        {
            using (var memStream = new MemoryStream(zip.Content, true))
            {
                var zipFile = new ZipArchive(memStream, ZipArchiveMode.Update);

                foreach (var zipArchiveEntry in zipFile.Entries.Reverse())
                {
                    if (IsNecessary(zipArchiveEntry.Name) == false)
                    {
                        zipArchiveEntry.Delete();
                    }
                }

                zip.Content = zipFile.Entries.Count > 0 ? memStream.ToArray() : null;
            }

            if (zip.Content == null)
            {
                fileList.Remove(zip);
            }
        }
        return fileList;

目前这一行:

zip.Content = zipFile.Entries.Count > 0 ? memStream.ToArray() : null;

给了我"清洁" MemoryStream回来了,但我需要新的。

你们有些tipps或者也许是我的解决方案,我怎么能用.NET处理这个问题?我现在已经搜索了一段时间,但它接缝了,所有人都只想在另一个方向上进行搜索。

PS:删除工作正常。

抱歉英文不好,并提前感谢您的帮助。 : - )

1 个答案:

答案 0 :(得分:1)

您拥有的代码几乎是正确的。您应该确保在使用memStream.ToArray()方法之前关闭原始zipFile对象。否则,归档对象不会更新流。只需给zipFile一个using语句,并将有问题的行保留在使用块的外部。

这就是答案并完成了这项工作。