How to compress and decompress files with Deflate in .NET C#
January 27, 2015 Leave a comment
We saw the usage of the GZipStream object in this post. GZipStream follows the GZip compression algorithm which is actually based on DEFLATE and includes some headers. As a result GZip files are somewhat bigger than DEFLATE files.
Just like with GZip, DEFLATE compresses a single file and does not hold multiple files in a zip archive fashion. It is represented by the DeflateStream object and is used in much the same way as a GZipStream. The example code is in fact almost identical.
This is how to compress a file:
FileInfo fileToBeDeflateZipped = new FileInfo(@"c:\deflate\logfile.txt");
FileInfo deflateZipFileName = new FileInfo(string.Concat(fileToBeDeflateZipped.FullName, ".cmp"));
using (FileStream fileToBeZippedAsStream = fileToBeDeflateZipped.OpenRead())
{
using (FileStream deflateZipTargetAsStream = deflateZipFileName.Create())
{
using (DeflateStream deflateZipStream = new DeflateStream(deflateZipTargetAsStream, CompressionMode.Compress))
{
try
{
fileToBeZippedAsStream.CopyTo(deflateZipStream);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
}
…and here’s how you can decompress a file:
using (FileStream fileToDecompressAsStream = deflateZipFileName.OpenRead())
{
string decompressedFileName = @"c:\deflate\decompressed.txt";
using (FileStream decompressedStream = File.Create(decompressedFileName))
{
using (DeflateStream decompressionStream = new DeflateStream(fileToDecompressAsStream, CompressionMode.Decompress))
{
try
{
decompressionStream.CopyTo(decompressedStream);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
}
Read all posts dedicated to file I/O here.