Was this page helpful?
Your feedback about this content is important. Let us know what you think.
Additional feedback?
1500 characters remaining
Export (0) Print
Expand All

DeflateStream Constructor (Stream, CompressionMode, Boolean)

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
)

Parameters

stream
Type: System.IO.Stream

The stream to compress or decompress.

mode
Type: System.IO.Compression.CompressionMode

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

leaveOpen
Type: System.Boolean

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

ExceptionCondition
ArgumentNullException

stream is null.

ArgumentException

mode is not a valid CompressionMode value.

-or-

CompressionMode is Compress and CanWrite is false.

-or-

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);
           Compress(directorySelected);
    	

        foreach (FileInfo fileToDecompress in directorySelected.GetFiles("*.cmp"))
        {
            Decompress(fileToDecompress);
        }
    }

    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))
                    {
                        originalFileStream.CopyTo(compressionStream);
                    }
                }

                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))
        	    {
                    decompressionStream.CopyTo(decompressedFileStream);
                    Console.WriteLine("Decompressed: {0}", fileToDecompress.Name);
        	    }
        	}
        }
    }
}

.NET Framework

Supported in: 4.6, 4.5, 4, 3.5, 3.0, 2.0

.NET Framework Client Profile

Supported in: 4, 3.5 SP1

XNA Framework

Supported in: 3.0

Portable Class Library

Supported in: Portable Class Library

Supported in: Windows Phone 8.1
Show:
© 2015 Microsoft