【发布时间】:2015-06-21 06:10:15
【问题描述】:
是否有可能从内存中的文件(而不是实际上在磁盘上)创建一个 ZipArchive。
以下是用例:
在IEnumerable<HttpPostedFileBase> 变量中接收到多个文件。我想使用ZipArchive 将所有这些文件压缩在一起。问题是ZipArchive 只允许CreateEntryFromFile,它需要文件的路径,因为我只有内存中的文件。
问题:
有没有办法使用“流”在ZipArchive 中创建“条目”,以便我可以直接将文件的内容放入 zip 中?
我不想先保存文件,创建 zip(从保存的文件的路径),然后删除单个文件。
这里,attachmentFiles 是 IEnumerable<HttpPostedFileBase>
using (var ms = new MemoryStream())
{
using (var zipArchive = new ZipArchive(ms, ZipArchiveMode.Create, true))
{
foreach (var attachment in attachmentFiles)
{
zipArchive.CreateEntryFromFile(Path.GetFullPath(attachment.FileName), Path.GetFileName(attachment.FileName),
CompressionLevel.Fastest);
}
}
...
}
【问题讨论】:
-
为什么不创建一个临时文件,然后在存档完成后发布?
-
如果可能的话,我想避免创建临时文件并在之后删除它。这就是我在问题中写的,但如果没有其他办法,那么我将不得不这样做。