¿Cómo crear ZipArchive a partir de archivos en la memoria en C #?
¿De alguna manera es posible crear un ZipArchive a partir de los archivos en la memoria (y no en el disco).
El siguiente es el caso de uso: Se reciben múltiples archivos en unIEnumerable<HttpPostedFileBase>
variable. Quiero comprimir todos estos archivos juntos usandoZipArchive
. El problema es eseZipArchive
solo permiteCreateEntryFromFile
, que espera una ruta al archivo, donde solo tengo los archivos en la memoria.
Pregunta: ¿Hay alguna manera de usar una 'secuencia' para crear la 'entrada' enZipArchive
, para que pueda poner directamente el contenido del archivo en el archivo zip?
No quiero guardar primero los archivos, crear el zip (desde las rutas de los archivos guardados) y luego eliminar los archivos individuales.
Aquí,attachmentFiles
esIEnumerable<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);
}
}
...
}