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.