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.
Assembly: System (in System.dll)
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.
| Exception | Condition |
|---|---|
| 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 { public static void Main() { string directoryPath = @"c:\users\public\reports"; DirectoryInfo directorySelected = new DirectoryInfo(directoryPath); foreach (FileInfo fileToCompress in directorySelected.GetFiles()) { Compress(fileToCompress); } foreach (FileInfo fileToDecompress in directorySelected.GetFiles("*.cmp")) { Decompress(fileToDecompress); } } public static void Compress(FileInfo fileToCompress) { using (FileStream originalFileStream = fileToCompress.OpenRead()) { if ((File.GetAttributes(fileToCompress.FullName) & FileAttributes.Hidden) != FileAttributes.Hidden & fileToCompress.Extension != ".cmp") { using (FileStream compressedFileStream = File.Create(fileToCompress.FullName + ".cmp")) { using (DeflateStream compressionStream = new DeflateStream(compressedFileStream, CompressionMode.Compress)) { originalFileStream.CopyTo(compressionStream); Console.WriteLine("Compressed {0} from {1} to {2} bytes.", fileToCompress.Name, fileToCompress.Length.ToString(), compressedFileStream.Length.ToString()); } } } } } 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); } } } } }
Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core Role not supported), Windows Server 2008 R2 (Server Core Role supported with SP1 or later; Itanium not supported)
The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.