diff --git a/OpenRPA.Utilities/Activities/CompressArchive.cs b/OpenRPA.Utilities/Activities/CompressArchive.cs index 02a487a9..42e19203 100644 --- a/OpenRPA.Utilities/Activities/CompressArchive.cs +++ b/OpenRPA.Utilities/Activities/CompressArchive.cs @@ -12,6 +12,8 @@ using Newtonsoft.Json; using ExcelDataReader; using System.Data; +using System.IO.Compression; +using System.IO; namespace OpenRPA.Utilities { @@ -28,12 +30,13 @@ public class CompressArchive : CodeActivity public InArgument CompressionLevel { get; set; } public InArgument IncludeBaseDirectory { get; set; } public InArgument Overwrite { get; set; } - + public InArgument Encoding { get; set; } protected override void Execute(CodeActivityContext context) { var includeBaseDirectory = IncludeBaseDirectory.Get(context); var compressionLevel = CompressionLevel.Get(context); var filename = Filename.Get(context); + var encoding = Encoding.Get(context); filename = Environment.ExpandEnvironmentVariables(filename); var path = Path.Get(context); path = Environment.ExpandEnvironmentVariables(path); @@ -48,7 +51,15 @@ protected override void Execute(CodeActivityContext context) throw new System.IO.IOException("The file '" + filename + "' already exists."); } } - System.IO.Compression.ZipFile.CreateFromDirectory(path, filename, (System.IO.Compression.CompressionLevel)compressionLevel, includeBaseDirectory); + if (string.IsNullOrEmpty(encoding)) + { + ZipFile.CreateFromDirectory(path, filename, (CompressionLevel)compressionLevel, includeBaseDirectory); + } else + { + ZipFile.CreateFromDirectory(path, filename, (CompressionLevel)compressionLevel, includeBaseDirectory, + System.Text.Encoding.GetEncoding(encoding)); + + } } } } diff --git a/OpenRPA.Utilities/Activities/ExpandArchive.cs b/OpenRPA.Utilities/Activities/ExpandArchive.cs index bbb5b250..49e755ea 100644 --- a/OpenRPA.Utilities/Activities/ExpandArchive.cs +++ b/OpenRPA.Utilities/Activities/ExpandArchive.cs @@ -13,6 +13,7 @@ using ExcelDataReader; using System.Data; using System.IO.Compression; +using System.IO; namespace OpenRPA.Utilities { @@ -26,17 +27,29 @@ public class ExpandArchive : CodeActivity [RequiredArgument] public InArgument Filename { get; set; } public InArgument Overwrite { get; set; } + public InArgument Encoding { get; set; } protected override void Execute(CodeActivityContext context) { var overwrite = Overwrite.Get(context); var filename = Filename.Get(context); + var encoding = Encoding.Get(context); filename = Environment.ExpandEnvironmentVariables(filename); var path = Path.Get(context); path = Environment.ExpandEnvironmentVariables(path); if(!string.IsNullOrEmpty(path) && !string.IsNullOrEmpty(filename)) { - var archive = ZipFile.OpenRead(filename); - archive.ExtractToDirectory(path, overwrite); + if(string.IsNullOrEmpty(encoding)) + { + var archive = ZipFile.OpenRead(filename); + archive.ExtractToDirectory(path, overwrite); + } + else + { + using (FileStream zipToOpen = new FileStream(filename, FileMode.Open)) { + ZipArchive archive = new ZipArchive(zipToOpen, ZipArchiveMode.Read, false, System.Text.Encoding.GetEncoding(encoding)); + archive.ExtractToDirectory(path, overwrite); + } + } } }