using System;
using System.IO;
using System.IO.Compression;
using System.Security.Cryptography;
using System.Text;
static void Main(string[] args)
{
DeflateStreamDemo();
Console.ReadLine();
}
static string fileName = "original.txt";
static string compressFileName = "compressed.cmp";
static string decompressFileName = "decompressed.txt";
static void DeflateStreamDemo()
{
using (FileStream fs = File.Create(fileName))
{
StringBuilder builder = new StringBuilder();
for(int i=0;i<10000;i++)
{
builder.AppendLine("Everything depend on myself!");
builder.AppendLine("Actions speak lounder than words!");
builder.AppendLine("Implement the promise via vision and adamant execution!\n");
}
byte[] bytesData = Encoding.UTF8.GetBytes(builder.ToString());
fs.Write(bytesData, 0, bytesData.Length);
}
CompressFile(fileName);
DecompressFile(compressFileName);
ValidateOriginalAndDecompressed();
}
private static void CompressFile(string fileName)
{
using (FileStream originalStream = File.OpenRead(fileName))
{
using (FileStream compressStream = File.Create(compressFileName))
{
using (DeflateStream ds = new DeflateStream(compressStream, CompressionMode.Compress))
{
originalStream.CopyTo(ds);
}
}
}
}
static void DecompressFile(string compressedFile)
{
using(FileStream compressedStream=File.OpenRead(compressedFile))
{
using(FileStream decompressStream=File.Create(decompressFileName))
{
using(DeflateStream ds=new DeflateStream(compressedStream, CompressionMode.Decompress))
{
ds.CopyTo(decompressStream);
}
}
}
}
static void ValidateOriginalAndDecompressed()
{
string rawMd5 = string.Empty;
string decompressMd5 = string.Empty;
using (StreamReader reader=new StreamReader(fileName))
{
string rawText = reader.ReadToEnd();
rawMd5 = GetStringMd5(rawText);
}
using(StreamReader reader=new StreamReader(decompressFileName))
{
string decompressedText = reader.ReadToEnd();
decompressMd5 = GetStringMd5(decompressedText);
}
if(string.Equals(rawMd5,decompressMd5))
{
Console.WriteLine("The identical!");
}
else
{
Console.WriteLine("Error!");
}
}
static string GetStringMd5(string str)
{
if(string.IsNullOrWhiteSpace(str))
{
return null;
}
StringBuilder builder = new StringBuilder();
using(MD5 md5= MD5.Create())
{
byte[] rawData = Encoding.UTF8.GetBytes(str);
byte[] md5Data = md5.ComputeHash(rawData);
for(int i=0;i<md5Data.Length;i++)
{
builder.Append(md5Data[i].ToString("x2"));
}
}
return builder.ToString();
}