早上好,
我需要你的帮助。
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:删除工作正常。
抱歉英文不好,并提前感谢您的帮助。 : - )
答案 0 :(得分:1)
您拥有的代码几乎是正确的。您应该确保在使用memStream.ToArray()方法之前关闭原始zipFile对象。否则,归档对象不会更新流。只需给zipFile一个using语句,并将有问题的行保留在使用块的外部。
这就是答案并完成了这项工作。