GZipStream Class
![]() |
---|
The .NET API Reference documentation has a new home. Visit the .NET API Browser on docs.microsoft.com to see the new experience. |
Provides methods and properties used to compress and decompress streams.
Assembly: Â System (in System.dll)
  System.MarshalByRefObject
    System.IO.Stream
      System.IO.Compression.GZipStream
Name | Description | |
---|---|---|
![]() | 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. |
Name | Description | |
---|---|---|
![]() | BaseStream | Gets a reference to the underlying stream. |
![]() | CanRead | Gets a value indicating whether the stream supports reading while decompressing a file.(Overrides Stream.CanRead.) |
![]() | CanSeek | Gets a value indicating whether the stream supports seeking.(Overrides Stream.CanSeek.) |
![]() | CanTimeout | Gets a value that determines whether the current stream can time out.(Inherited from Stream.) |
![]() | CanWrite | Gets a value indicating whether the stream supports writing.(Overrides Stream.CanWrite.) |
![]() | Length | This property is not supported and always throws a NotSupportedException.(Overrides Stream.Length.) |
![]() | Position | This property is not supported and always throws a NotSupportedException.(Overrides Stream.Position.) |
![]() | ReadTimeout | Gets or sets a value, in miliseconds, that determines how long the stream will attempt to read before timing out. (Inherited from Stream.) |
![]() | WriteTimeout | Gets or sets a value, in miliseconds, that determines how long the stream will attempt to write before timing out. (Inherited from Stream.) |
Name | Description | |
---|---|---|
![]() | BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) | Begins an asynchronous read operation. (Consider using the Stream.ReadAsync method instead; see the Remarks section.)(Overrides Stream.BeginRead(Byte[], Int32, Int32, AsyncCallback, Object).) |
![]() | BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object) | Begins an asynchronous write operation. (Consider using the Stream.WriteAsync method instead; see the Remarks section.)(Overrides Stream.BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object).) |
![]() | Close() | Closes the current stream and releases any resources (such as sockets and file handles) associated with the current stream. Instead of calling this method, ensure that the stream is properly disposed.(Inherited from Stream.) |
![]() | CopyTo(Stream) | Reads the bytes from the current stream and writes them to another stream.(Inherited from Stream.) |
![]() | CopyTo(Stream, Int32) | Reads the bytes from the current stream and writes them to another stream, using a specified buffer size.(Inherited from Stream.) |
![]() | CopyToAsync(Stream) | Asynchronously reads the bytes from the current stream and writes them to another stream.(Inherited from Stream.) |
![]() | CopyToAsync(Stream, Int32) | Asynchronously reads the bytes from the current stream and writes them to another stream, using a specified buffer size.(Inherited from Stream.) |
![]() | CopyToAsync(Stream, Int32, CancellationToken) | Asynchronously reads the bytes from the current stream and writes them to another stream, using a specified buffer size and cancellation token.(Inherited from Stream.) |
![]() | CreateObjRef(Type) | Creates an object that contains all the relevant information required to generate a proxy used to communicate with a remote object.(Inherited from MarshalByRefObject.) |
![]() | CreateWaitHandle() | Obsolete. Allocates a WaitHandle object.(Inherited from Stream.) |
![]() | Dispose() | |
![]() | Dispose(Boolean) | Releases the unmanaged resources used by the GZipStream and optionally releases the managed resources.(Overrides Stream.Dispose(Boolean).) |
![]() | EndRead(IAsyncResult) | Waits for the pending asynchronous read to complete. (Consider using the the Stream.ReadAsync method instead; see the Remarks section.)(Overrides Stream.EndRead(IAsyncResult).) |
![]() | EndWrite(IAsyncResult) | Handles the end of an asynchronous write operation. (Consider using the Stream.WriteAsync method instead; see the Remarks section.)(Overrides Stream.EndWrite(IAsyncResult).) |
![]() | Equals(Object) | Determines whether the specified object is equal to the current object.(Inherited from Object.) |
![]() | Finalize() | Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection.(Inherited from Object.) |
![]() | Flush() | The current implementation of this method has no functionality.(Overrides Stream.Flush().) |
![]() | FlushAsync() | Asynchronously clears all buffers for this stream and causes any buffered data to be written to the underlying device.(Inherited from Stream.) |
![]() | FlushAsync(CancellationToken) | Asynchronously clears all buffers for this stream, causes any buffered data to be written to the underlying device, and monitors cancellation requests.(Inherited from Stream.) |
![]() | GetHashCode() | Serves as the default hash function. (Inherited from Object.) |
![]() | GetLifetimeService() | Retrieves the current lifetime service object that controls the lifetime policy for this instance.(Inherited from MarshalByRefObject.) |
![]() | GetType() | |
![]() | InitializeLifetimeService() | Obtains a lifetime service object to control the lifetime policy for this instance.(Inherited from MarshalByRefObject.) |
![]() | MemberwiseClone() | |
![]() | MemberwiseClone(Boolean) | Creates a shallow copy of the current MarshalByRefObject object.(Inherited from MarshalByRefObject.) |
![]() | ObjectInvariant() | |
![]() | Read(Byte[], Int32, Int32) | Reads a number of decompressed bytes into the specified byte array.(Overrides Stream.Read(Byte[], Int32, Int32).) |
![]() | ReadAsync(Byte[], Int32, Int32) | Asynchronously reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read.(Inherited from Stream.) |
![]() | ReadAsync(Byte[], Int32, Int32, CancellationToken) | Asynchronously reads a sequence of bytes from the current stream, advances the position within the stream by the number of bytes read, and monitors cancellation requests.(Inherited from Stream.) |
![]() | ReadByte() | Reads a byte from the stream and advances the position within the stream by one byte, or returns -1 if at the end of the stream.(Inherited from Stream.) |
![]() | Seek(Int64, SeekOrigin) | This property is not supported and always throws a NotSupportedException.(Overrides Stream.Seek(Int64, SeekOrigin).) |
![]() | SetLength(Int64) | This property is not supported and always throws a NotSupportedException.(Overrides Stream.SetLength(Int64).) |
![]() | ToString() | Returns a string that represents the current object.(Inherited from Object.) |
![]() | Write(Byte[], Int32, Int32) | Writes compressed bytes to the underlying stream from the specified byte array.(Overrides Stream.Write(Byte[], Int32, Int32).) |
![]() | WriteAsync(Byte[], Int32, Int32) | Asynchronously writes a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written.(Inherited from Stream.) |
![]() | WriteAsync(Byte[], Int32, Int32, CancellationToken) | Asynchronously writes a sequence of bytes to the current stream, advances the current position within this stream by the number of bytes written, and monitors cancellation requests.(Inherited from Stream.) |
![]() | WriteByte(Byte) | Writes a byte to the current position in the stream and advances the position within the stream by one byte.(Inherited from Stream.) |
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.
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); } } } } } }
Available since 8
.NET Framework
Available since 2.0
Portable Class Library
Supported in: portable .NET platforms
Windows Phone
Available since 8.1
Any public static ( Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.