RSE/Models/Helper/CompressionHelper.cs

50 lines
1.8 KiB
C#

using System.IO.Compression;
using System.Text;
namespace Models.Helper;
public static class CompressionHelper
{
public static void CompressFile(string sourceFile, string targetFile)
{
using FileStream originalFileStream = new(sourceFile, FileMode.Open);
using FileStream compressedFileStream = File.Create($"{targetFile}.gz");
using GZipStream compressor = new(compressedFileStream, CompressionLevel.SmallestSize);
originalFileStream.CopyTo(compressor);
}
public static void DecompressFile(string sourceFile, string targetFile)
{
using FileStream compressedFileStream = new(sourceFile, FileMode.Open);
using FileStream decompressedFileStream = File.Create($"{targetFile}.gz");
using GZipStream decompressor = new(compressedFileStream, CompressionMode.Decompress);
decompressor.CopyTo(decompressedFileStream);
}
public static string CompressString(string text)
{
byte[] byteArray = Encoding.UTF8.GetBytes(text);
using MemoryStream memoryStream = new();
using (BrotliStream compressionStream = new(memoryStream, CompressionLevel.SmallestSize))
{
compressionStream.Write(byteArray, 0, byteArray.Length);
}
return Convert.ToBase64String(memoryStream.ToArray());
}
public static string DecompressString(string compressedText)
{
byte[] byteArray = Convert.FromBase64String(compressedText);
using MemoryStream memoryStream = new(byteArray);
using BrotliStream decompressionStream = new(memoryStream, CompressionMode.Decompress);
using StreamReader reader = new(decompressionStream);
return reader.ReadToEnd();
}
}