【发布时间】:2017-03-14 10:50:20
【问题描述】:
我在创建包含多个条目的 zip 文件时遇到问题。我已经查看了this 类似问题的答案,但仍然没有喜悦。我的代码如下:
var folders = await _folderManager.GetDescendentsAsync(id);
using (MemoryStream memoryStream = new MemoryStream())
{
// Build the archive
using (ZipArchive zipArchive = new ZipArchive(memoryStream, ZipArchiveMode.Create, true))
{
foreach (var folder in folders)
{
//get the path
var path = GetPath(folder);
foreach (var file in folder.Documents)
{
//get the file stream from storage
var docStream = _documentManager.DownloadById(file.Id);
//create an entry in the zip
ZipArchiveEntry archiveEntry = zipArchive.CreateEntry(path + file.Name);
using (var entryStream = archiveEntry.Open())
{
await docStream.CopyToAsync(entryStream);
}
}
}
using (var fileStream = new FileStream(@"C:\Temp\ZipFile.zip", FileMode.Create))
{
memoryStream.Seek(0, SeekOrigin.Begin);
await memoryStream.CopyToAsync(fileStream);
}
}
}
我获得了包含多个条目的 zip 文件,但是当我尝试打开它时收到错误“存档意外结束”。
谁能告诉我我做错了什么?
【问题讨论】:
-
关闭/刷新 zip 存档 之前 使用
CopyTo保存结果 -
您可能需要刷新
memoryStream,请参见此处:stackoverflow.com/questions/9469434/… -
啊!现在如此明显,但我看不到树木的树林!我正在使用语句复制到 zip 存档中的 fileStream。通过让 zipArchive 处理,我能够复制到文件流。无需冲洗。
标签: c# .net zip compression