GZipStream Class

Definition

Provides methods and properties used to compress and decompress streams.

public class GZipStream : System.IO.Stream
Inheritance

Examples

The following example shows how to use the GZipStream class to compress and decompress a directory of files.

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

namespace zip
{
    public class Program
    {
        private static string directoryPath = @"c:\temp";
        public static void Main()
        {
            DirectoryInfo directorySelected = new DirectoryInfo(directoryPath);
            Compress(directorySelected);

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

        public static void Compress(DirectoryInfo directorySelected)
        {
            foreach (FileInfo fileToCompress in directorySelected.GetFiles())
            {
                using (FileStream originalFileStream = fileToCompress.OpenRead())
                {
                    if ((File.GetAttributes(fileToCompress.FullName) & 
                       FileAttributes.Hidden) != FileAttributes.Hidden & fileToCompress.Extension != ".gz")
                    {
                        using (FileStream compressedFileStream = File.Create(fileToCompress.FullName + ".gz"))
                        {
                            using (GZipStream compressionStream = new GZipStream(compressedFileStream, 
                               CompressionMode.Compress))
                            {
                                originalFileStream.CopyTo(compressionStream);

                            }
                        }
                        FileInfo info = new FileInfo(directoryPath + "\\" + fileToCompress.Name + ".gz");
                        Console.WriteLine("Compressed {0} from {1} to {2} bytes.",
                        fileToCompress.Name, fileToCompress.Length.ToString(), info.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 (GZipStream decompressionStream = new GZipStream(originalFileStream, CompressionMode.Decompress))
                    {
                        decompressionStream.CopyTo(decompressedFileStream);
                        Console.WriteLine("Decompressed: {0}", fileToDecompress.Name);
                    }
                }
            }
        }
    }
}
Imports System.IO
Imports System.IO.Compression
Module Module1

    Private directoryPath As String = "c:\temp"
    Public Sub Main()
        Dim directorySelected As New DirectoryInfo(directoryPath)
        Compress(directorySelected)

        For Each fileToDecompress As FileInfo In directorySelected.GetFiles("*.gz")
            Decompress(fileToDecompress)
        Next
    End Sub

    Public Sub Compress(directorySelected As DirectoryInfo)
        For Each fileToCompress As FileInfo In directorySelected.GetFiles()
            Using originalFileStream As FileStream = fileToCompress.OpenRead()
                If (File.GetAttributes(fileToCompress.FullName) And FileAttributes.Hidden) <> FileAttributes.Hidden And fileToCompress.Extension <> ".gz" Then
                    Using compressedFileStream As FileStream = File.Create(fileToCompress.FullName & ".gz")
                        Using compressionStream As New GZipStream(compressedFileStream, CompressionMode.Compress)

                            originalFileStream.CopyTo(compressionStream)
                        End Using
                    End Using
                    Dim info As New FileInfo(directoryPath & "\" & fileToCompress.Name & ".gz")
                    Console.WriteLine("Compressed {0} from {1} to {2} bytes.", fileToCompress.Name,
                                      fileToCompress.Length.ToString(), info.Length.ToString())

                End If
            End Using
        Next
    End Sub


    Private Sub Decompress(ByVal fileToDecompress As FileInfo)
        Using originalFileStream As FileStream = fileToDecompress.OpenRead()
            Dim currentFileName As String = fileToDecompress.FullName
            Dim newFileName = currentFileName.Remove(currentFileName.Length - fileToDecompress.Extension.Length)

            Using decompressedFileStream As FileStream = File.Create(newFileName)
                Using decompressionStream As GZipStream = New GZipStream(originalFileStream, CompressionMode.Decompress)
                    decompressionStream.CopyTo(decompressedFileStream)
                    Console.WriteLine("Decompressed: {0}", fileToDecompress.Name)
                End Using
            End Using
        End Using
    End Sub
End Module

Remarks

This class represents the gzip data format, which uses an industry-standard algorithm for lossless file compression and decompression. The format includes a cyclic redundancy check value for detecting data corruption. The gzip data format uses the same algorithm as the DeflateStream class, but can be extended to use other compression formats. The format can be readily implemented in a manner not covered by patents.

Starting with the .NET Framework 4.5, the DeflateStream class uses the zlib library for compression. As a result, it provides a better compression algorithm and, in most cases, a smaller compressed file than it provides in earlier versions of the .NET Framework.

Compressed GZipStream objects written to a file with an extension of .gz can be decompressed using many common compression tools; however, this class does not inherently provide functionality for adding files to or extracting files from zip archives.

The compression functionality in DeflateStream and GZipStream is exposed as a stream. Data is read on a byte-by-byte basis, so it is not possible to perform multiple passes to determine the best method for compressing entire files or large blocks of data. The DeflateStream and GZipStream classes are best used on uncompressed sources of data. If the source data is already compressed, using these classes may actually increase the size of the stream.

Notes to Inheritors

When you inherit from GZipStream, you must override the following members: CanSeek, CanWrite, and CanRead.

Constructors

GZipStream(Stream, CompressionLevel)

Initializes a new instance of the GZipStream class by using the specified stream and compression level.

GZipStream(Stream, CompressionLevel, Boolean)

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

GZipStream(Stream, CompressionMode)

Initializes a new instance of the GZipStream class by using the specified stream and compression mode.

GZipStream(Stream, CompressionMode, Boolean)

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

Properties

BaseStream

Gets a reference to the underlying stream.

CanRead

Gets a value indicating whether the stream supports reading while decompressing a file.

CanSeek

Gets a value indicating whether the stream supports seeking.

CanTimeout Inherited from Stream
CanWrite

Gets a value indicating whether the stream supports writing.

Length

This property is not supported and always throws a NotSupportedException.

Position

This property is not supported and always throws a NotSupportedException.

ReadTimeout Inherited from Stream
WriteTimeout Inherited from Stream

Methods

BeginRead(Byte[], Int32, Int32, AsyncCallback, Object)

Begins an asynchronous read operation. (Consider using the ReadAsync(Byte[], Int32, Int32) method instead.)

BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object)

Begins an asynchronous write operation. (Consider using the WriteAsync(Byte[], Int32, Int32) method instead.)

Close() Inherited from Stream
CopyTo(Stream) Inherited from Stream
CopyTo(Stream, Int32) Inherited from Stream
CopyToAsync(Stream) Inherited from Stream
CopyToAsync(Stream, Int32) Inherited from Stream
CopyToAsync(Stream, Int32, CancellationToken) Inherited from Stream
CreateObjRef(Type) Inherited from MarshalByRefObject
CreateWaitHandle() Inherited from Stream
Dispose() Inherited from Stream
Dispose(Boolean)

Releases the unmanaged resources used by the GZipStream and optionally releases the managed resources.

EndRead(IAsyncResult)

Waits for the pending asynchronous read to complete. (Consider using the the ReadAsync(Byte[], Int32, Int32) method instead.)

EndWrite(IAsyncResult)

Handles the end of an asynchronous write operation. (Consider using the WriteAsync(Byte[], Int32, Int32) method instead.)

Equals(Object) Inherited from Object
Equals(Object, Object) Inherited from Object
Flush()

The current implementation of this method has no functionality.

FlushAsync() Inherited from Stream
FlushAsync(CancellationToken) Inherited from Stream
GetHashCode() Inherited from Object
GetLifetimeService() Inherited from MarshalByRefObject
GetType() Inherited from Object
InitializeLifetimeService() Inherited from MarshalByRefObject
MemberwiseClone() Inherited from Object
MemberwiseClone(Boolean) Inherited from MarshalByRefObject
ObjectInvariant() Inherited from Stream
Read(Byte[], Int32, Int32)

Reads a number of decompressed bytes into the specified byte array.

ReadAsync(Byte[], Int32, Int32) Inherited from Stream
ReadAsync(Byte[], Int32, Int32, CancellationToken)
ReadByte() Inherited from Stream
ReferenceEquals(Object, Object) Inherited from Object
Seek(Int64, SeekOrigin)

This property is not supported and always throws a NotSupportedException.

SetLength(Int64)

This property is not supported and always throws a NotSupportedException.

Synchronized(Stream) Inherited from Stream
ToString() Inherited from Object
Write(Byte[], Int32, Int32)

Writes compressed bytes to the underlying stream from the specified byte array.

WriteAsync(Byte[], Int32, Int32) Inherited from Stream
WriteAsync(Byte[], Int32, Int32, CancellationToken)
WriteByte(Byte) Inherited from Stream

Fields

Null Inherited from Stream

Applies to