From 379083120112a0a6d322531a1d5ff454c4411f2c Mon Sep 17 00:00:00 2001 From: ivarlovlie Date: Tue, 25 May 2021 01:12:38 +0200 Subject: Add InMemoryZipArchive --- src/IOL.Helpers/InMemoryZipArchive.cs | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 src/IOL.Helpers/InMemoryZipArchive.cs diff --git a/src/IOL.Helpers/InMemoryZipArchive.cs b/src/IOL.Helpers/InMemoryZipArchive.cs new file mode 100644 index 0000000..8d3fc94 --- /dev/null +++ b/src/IOL.Helpers/InMemoryZipArchive.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.IO.Compression; + +namespace IOL.Helpers +{ + public static class InMemoryZipArchive + { + public static byte[] Create(IEnumerable files, string unixPermissionString = "664") { + using var archiveStream = new MemoryStream(); + using (var archive = new ZipArchive(archiveStream, ZipArchiveMode.Create, true)) { + foreach (var file in files) { + var zipArchiveEntry = archive.CreateEntry(file.FileName, CompressionLevel.Fastest); + zipArchiveEntry.ExternalAttributes |= Convert.ToInt32(unixPermissionString, 8) << 16; + using var zipStream = zipArchiveEntry.Open(); + zipStream.Write(file.Content, 0, file.Content.Length); + } + } + + return archiveStream.ToArray(); + } + + public class InMemoryFile + { + public string FileName { get; set; } + public byte[] Content { get; set; } + } + } +} -- cgit v1.3