Skip to main content
.NET Framework Class Library
GZipStream Constructor (Stream, CompressionMode)

Updated: January 2012

Initializes a new instance of the GZipStream class using the specified stream and CompressionMode value.

Namespace: System.IO.Compression
Assembly: System (in System.dll)
Syntax
Public Sub New ( _
	stream As Stream, _
	mode As CompressionMode _
)
public GZipStream(
	Stream stream,
	CompressionMode mode
)
public:
GZipStream(
	Stream^ stream, 
	CompressionMode mode
)
new : 
        stream:Stream * 
        mode:CompressionMode -> GZipStream

Parameters

stream
Type: System.IO..::.Stream
The stream to compress or decompress.
mode
Type: System.IO.Compression..::.CompressionMode
One of the CompressionMode values that indicates the action to take.
Exceptions
ExceptionCondition
ArgumentNullException

stream is nullNothingnullptra null reference (Nothing in Visual Basic).

ArgumentException

mode is not a valid CompressionMode enumeration value.

-or-

CompressionMode is Compress and CanWrite is false.

-or-

CompressionMode is Decompress and CanRead is false.

Remarks

By default, GZipStream owns the underlying stream, so closing the stream parameter 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 GZipStream class is created with the mode parameter equal to Compress and no further action occurs, the stream will appear as a valid, empty compressed file.

The GZipStream class cannot decompress data that results in over 8 GB of uncompressed data.

Examples

The following example initializes a new instance of the GZipStream class with mode set to Compress. This example is part of a larger example provided for the GZipStream class.


Imports System.IO
Imports System.IO.Compression
Module Module1

    Sub Main()
        ' Path to directory of files to compress.
        Dim dirpath As String = "c:\users\public\reports"

        Dim di As DirectoryInfo = New DirectoryInfo(dirpath)


        ' Compress the directory's files.
        For Each fi As FileInfo In di.GetFiles()
            Compress(fi)
        Next

        ' Decompress all *.gz files in the directory.
        For Each fi As FileInfo In di.GetFiles("*.gz")
            Decompress(fi)
        Next

    End Sub

    ' Method to compress.
    Private Sub Compress(ByVal fi As FileInfo)
        ' Get the stream of the source file.
        Using inFile As FileStream = fi.OpenRead()
            ' Compressing:
            ' Prevent compressing hidden and already compressed files.

            If (File.GetAttributes(fi.FullName) And FileAttributes.Hidden) _
                <> FileAttributes.Hidden And fi.Extension <> ".gz" Then
                ' Create the compressed file.
                Using outFile As FileStream = File.Create(fi.FullName + ".gz")
                    Using Compress As GZipStream = _
                    	New GZipStream(outFile, CompressionMode.Compress)
                    	
                        ' Copy the source file into the compression stream.
                        inFile.CopyTo(Compress)

                        Console.WriteLine("Compressed {0} from {1} to {2} bytes.", _
                                          fi.Name, fi.Length.ToString(), outFile.Length.ToString())

                    End Using
                End Using
            End If
        End Using
    End Sub

    ' Method to decompress.
    Private Sub Decompress(ByVal fi As FileInfo)
        ' Get the stream of the source file.
        Using inFile As FileStream = fi.OpenRead()
            ' Get orignial file extension, for example "doc" from report.doc.gz.
            Dim curFile As String = fi.FullName
            Dim origName = curFile.Remove(curFile.Length - fi.Extension.Length)

            ' Create the decompressed file.
            Using outFile As FileStream = File.Create(origName)
                Using Decompress As GZipStream = New GZipStream(inFile, _
                	CompressionMode.Decompress)
            		
  						' Copy the decompression stream 
                        ' into the output file.
            		    Decompress.CopyTo(outFile)

                    Console.WriteLine("Decompressed: {0}", fi.Name)

                End Using
            End Using
        End Using
    End Sub
End Module


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

namespace zip
{

    public class Program
    {

        public static void Main()
        {
            // Path to directory of files to compress and decompress.
            string dirpath = @"c:\users\public\reports";

            DirectoryInfo di = new DirectoryInfo(dirpath);

            // Compress the directory's files.
            foreach (FileInfo fi in di.GetFiles())
            {
                Compress(fi);

            }

            // Decompress all *.gz files in the directory.
            foreach (FileInfo fi in di.GetFiles("*.gz"))
            {
                Decompress(fi);

            }


        }

        public static void Compress(FileInfo fi)
        {
            // Get the stream of the source file.
            using (FileStream inFile = fi.OpenRead())
            {
                // Prevent compressing hidden and 
                // already compressed files.
                if ((File.GetAttributes(fi.FullName) 
                	& FileAttributes.Hidden)
                	!= FileAttributes.Hidden & fi.Extension != ".gz")
                {
                    // Create the compressed file.
                    using (FileStream outFile = 
                    			File.Create(fi.FullName + ".gz"))
                    {
                        using (GZipStream Compress = 
                        	new GZipStream(outFile, 
                        	CompressionMode.Compress))
                        {
                            // Copy the source file into 
                            // the compression stream.
                        inFile.CopyTo(Compress);

                            Console.WriteLine("Compressed {0} from {1} to {2} bytes.",
                                fi.Name, fi.Length.ToString(), outFile.Length.ToString());
                        }
                    }
                }
            }
        }

        public static void Decompress(FileInfo fi)
        {
            // Get the stream of the source file.
            using (FileStream inFile = fi.OpenRead())
            {
                // Get original file extension, for example
                // "doc" from report.doc.gz.
                string curFile = fi.FullName;
                string origName = curFile.Remove(curFile.Length - 
                		fi.Extension.Length);

                //Create the decompressed file.
                using (FileStream outFile = File.Create(origName))
                {
                    using (GZipStream Decompress = new GZipStream(inFile,
                            CompressionMode.Decompress))
                    {
                        // Copy the decompression stream 
                        // into the output file.
            		    Decompress.CopyTo(outFile);
            		    
                        Console.WriteLine("Decompressed: {0}", fi.Name);

                    }
                }
            }
        }

    }
}

Version Information

.NET Framework

Supported in: 4, 3.5, 3.0, 2.0

.NET Framework Client Profile

Supported in: 4, 3.5 SP1
Platforms

Windows 7, Windows Vista SP1 or later, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (Server Core not supported), Windows Server 2008 R2 (Server Core supported with SP1 or later), Windows Server 2003 SP2

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.
Change History

Date

History

Reason

January 2012

Added information about decompression size limit.

Content bug fix.

March 2011

Corrected exceptions.

Information enhancement.