Home
C#
GZipStream Example (DeflateStream)
Updated Feb 2, 2024
Dot Net Perls
GZipStream. This class compresses data. It saves data efficiently—such as in compressed log files. GZIP has a file header, while DEFLATE does not.
GZIP Compress
We develop a utility method in the C# language that uses the System.IO.Compression namespace. It creates GZIP files. It writes them to the disk.
GZipStream example. We use the .NET built-in methods. Compression and decompression using GZIP is common in any programming language. GZIP is widely used on the Internet.
Note The GZIP compression algorithm is used on many web pages to boost performance. This method shows the use of GZIP on a string.
Part 1 We use Path.GetTempFileName and File.WriteAllText. This writes the string to a temporary file.
Part 2 We use FileStream here to read in bytes from the file. The using statement provides effective system resource disposal.
using
byte Array
Part 3 We use a new GZipStream to write the compressed data to the disk. We must combine it with a FileStream.
using System.IO; using System.IO.Compression; using System.Text; class Program { static void Main() { try { // Starting file is 26,747 bytes. string anyString = File.ReadAllText("TextFile1.txt"); // Output file is 7,388 bytes. CompressStringToFile("new.gz", anyString); } catch { // Could not compress. } } public static void CompressStringToFile(string fileName, string value) { // Part 1: write string to temporary file. string temp = Path.GetTempFileName(); File.WriteAllText(temp, value); // Part 2: read file into byte array buffer. byte[] b; using (FileStream f = new FileStream(temp, FileMode.Open)) { b = new byte[f.Length]; f.Read(b, 0, (int)f.Length); } // Part 3: use GZipStream to write compressed bytes to target file. using (FileStream f2 = new FileStream(fileName, FileMode.Create)) using (GZipStream gz = new GZipStream(f2, CompressionMode.Compress, false)) { gz.Write(b, 0, b.Length); } } }
Starting file is 26,747 bytes. Output file is 7,388 bytes.
DeflateStream. With DeflateStream we can output a deflate file. A GZIP file contains a DEFLATE body. With GZIP we have an additional header.
So We can use DeflateStream to generate the DEFLATE body with no header. This may be useful in some situations.
using System.IO; using System.IO.Compression; class Program { static void Main() { CompressWithDeflate("C:\\programs\\example.txt", "C:\\programs\\deflate-output"); } static void CompressWithDeflate(string inputPath, string outputPath) { // Read in input file. byte[] b = File.ReadAllBytes(inputPath); // Write compressed data with DeflateStream. using (FileStream f2 = new FileStream(outputPath, FileMode.Create)) using (DeflateStream deflate = new DeflateStream(f2, CompressionMode.Compress, false)) { deflate.Write(b, 0, b.Length); } } }
Notes, reliable. CompressStringToFile is tested and reliable. I have used it in deployed applications. It however can be slow—caching, or other optimizations may be needed.
Memoization
A summary. We used GZipStream to compress to a file with an underlying FileStream. More complex methods are available for compression. This example alone does not meet most requirements.
Dot Net Perls is a collection of pages with code examples, which are updated to stay current. Programming is an art, and it can be learned from examples.
Donate to this site to help offset the costs of running the server. Sites like this will cease to exist if there is no financial support for them.
Sam Allen is passionate about computer languages, and he maintains 100% of the material available on this website. He hopes it makes the world a nicer place.
This page was last updated on Feb 2, 2024 (edit).
Home
Changes
© 2007-2025 Sam Allen