DeflateStream Constructor (Stream, CompressionMode, Boolean)


The .NET API Reference documentation has a new home. Visit the .NET API Browser on to see the new experience.

Initializes a new instance of the DeflateStream class by using the specified stream and compression mode, and optionally leaves the stream open.

Namespace:   System.IO.Compression
Assembly:  System (in System.dll)

public DeflateStream(
	Stream stream,
	CompressionMode mode,
	bool leaveOpen


Type: System.IO.Stream

The stream to compress or decompress.

Type: System.IO.Compression.CompressionMode

One of the enumeration values that indicates whether to compress or decompress the stream.

Type: System.Boolean

true to leave the stream open after disposing the DeflateStream object; otherwise, false.

Exception Condition

stream is null.


mode is not a valid CompressionMode value.


CompressionMode is Compress and CanWrite is false.


CompressionMode is Decompress and CanRead is false.

By default, DeflateStream owns the underlying stream, so closing the stream also closes the underlying stream. Note that the state of the underlying stream can affect the usability of the stream. Also, no explicit checks are performed, so no additional exceptions are thrown when the new instance is created.

If an instance of the DeflateStream class is created with the mode parameter equal to Compress, header information is inserted immediately. If no further action occurs, the stream appears as a valid, empty, compressed file.

Using the DeflateStream class to compress a file larger than 4 GB raises an exception.

By default, the compression level is set to Optimal when the compression mode is Compress.

The following code example shows how to use the DeflateStream class to compress and decompress a file.

using System;
using System.IO;
using System.IO.Compression;

public class Program
    static string directoryPath = @"c:\temp";
    public static void Main()

        DirectoryInfo directorySelected = new DirectoryInfo(directoryPath);

        foreach (FileInfo fileToDecompress in directorySelected.GetFiles("*.cmp"))

    public static void Compress(DirectoryInfo directorySelected)

        foreach (FileInfo file in directorySelected.GetFiles("*.xml"))
        using (FileStream originalFileStream = file.OpenRead())
            if ((File.GetAttributes(file.FullName) & FileAttributes.Hidden)
                != FileAttributes.Hidden & file.Extension != ".cmp")
                using (FileStream compressedFileStream = File.Create(file.FullName + ".cmp"))
                    using (DeflateStream compressionStream = new DeflateStream(compressedFileStream, CompressionMode.Compress))

                FileInfo info = new FileInfo(directoryPath + "\\" + file.Name + ".cmp");
                Console.WriteLine("Compressed {0} from {1} to {2} bytes.", file.Name, file.Length, info.Length);

    public static void Decompress(FileInfo fileToDecompress)
        using (FileStream originalFileStream = fileToDecompress.OpenRead())
            string currentFileName = fileToDecompress.FullName;
            string newFileName = currentFileName.Remove(currentFileName.Length - fileToDecompress.Extension.Length);

            using (FileStream decompressedFileStream = File.Create(newFileName))
                using (DeflateStream decompressionStream = new DeflateStream(originalFileStream, CompressionMode.Decompress))
                    Console.WriteLine("Decompressed: {0}", fileToDecompress.Name);

Universal Windows Platform
Available since 8
.NET Framework
Available since 2.0
Portable Class Library
Supported in: portable .NET platforms
Windows Phone
Available since 8.1
Return to top