是否有可能从内存中(而不是磁盘上)的文件创建ZipArchive。
以下是用例:多个文件在IENumable中被接收
问题:有没有一种方法可以使用“流”在ZipArchive
中创建“条目”,这样我就可以直接将文件的内容放入zip中?
我不想先保存文件,创建zip(从保存的文件路径),然后删除单个文件。
这里,attachmentFiles
是IEnumerable
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);
}
}
...
}
是的,你可以用拉链箱来做。CreateEntry方法,正如@Angelore在注释中指出的,这里描述的是一个稍微不同的问题。
您的代码将如下所示:
using (var ms = new MemoryStream())
{
using (var zipArchive = new ZipArchive(ms, ZipArchiveMode.Create, true))
{
foreach (var attachment in attachmentFiles)
{
var entry = zipArchive.CreateEntry(attachment.FileName, CompressionLevel.Fastest);
using (var entryStream = entry.Open())
{
attachment.InputStream.CopyTo(entryStream);
}
}
}
...
}
首先感谢@Alex给出的完美答案
对于需要从文件系统读取的场景:
using (var ms = new MemoryStream())
{
using (var zipArchive = new ZipArchive(ms, ZipArchiveMode.Create, true))
{
foreach (var file in filesAddress)
{
zipArchive.CreateEntryFromFile(file, Path.GetFileName(file));
}
}
...
}
借助系统。木卫一。压缩。ZipFileExtensions