summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/IOL.Helpers/InMemoryZipArchive.cs30
1 files changed, 30 insertions, 0 deletions
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<InMemoryFile> 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; }
+ }
+ }
+}