GZipStream Classe

Definizione

Fornisce i metodi e le proprietà usati per comprimere e decomprimere i flussi tramite la specifica del formato di dati GZip.Provides methods and properties used to compress and decompress streams by using the GZip data format specification.

public ref class GZipStream : System::IO::Stream
public class GZipStream : System.IO.Stream
type GZipStream = class
    inherit Stream
Public Class GZipStream
Inherits Stream
Ereditarietà

Esempi

Nell'esempio seguente viene illustrato come utilizzare la GZipStream classe per comprimere e decomprimere una directory di file.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;

public class Program
{
    private static string directoryPath = @".\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 + Path.DirectorySeparatorChar + fileToCompress.Name + ".gz");
                    Console.WriteLine($"Compressed {fileToCompress.Name} from {fileToCompress.Length.ToString()} to {info.Length.ToString()} bytes.");
                }

            }
        }
    }

    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: {fileToDecompress.Name}");
                }
            }
        }
    }
}
Imports System.IO
Imports System.IO.Compression

Module Module1

    Private directoryPath As String = ".\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 & Path.DirectorySeparatorChar & fileToCompress.Name & ".gz")
                    Console.WriteLine($"Compressed {fileToCompress.Name} from {fileToCompress.Length.ToString()} to {info.Length.ToString()} bytes.")

                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: {fileToDecompress.Name}")
                End Using
            End Using
        End Using
    End Sub
End Module

Commenti

Questa classe rappresenta il formato dei dati gzip, che usa un algoritmo standard del settore per la compressione e la decompressione di file senza perdita di dati.This class represents the gzip data format, which uses an industry-standard algorithm for lossless file compression and decompression. Il formato include un valore di controllo di ridondanza ciclico per il rilevamento del danneggiamento dei dati.The format includes a cyclic redundancy check value for detecting data corruption. Il formato dei dati gzip usa lo stesso algoritmo DeflateStream della classe, ma può essere esteso per usare altri formati di compressione.The gzip data format uses the same algorithm as the DeflateStream class, but can be extended to use other compression formats. Il formato può essere prontamente implementato in modo non coperto da brevetti.The format can be readily implemented in a manner not covered by patents.

A partire da .NET Framework 4.5.NET Framework 4.5, la DeflateStream classe usa la libreria zlib per la compressione.Starting with the .NET Framework 4.5.NET Framework 4.5, the DeflateStream class uses the zlib library for compression. Di conseguenza, fornisce un algoritmo di compressione migliore e, nella maggior parte dei casi, un file compresso più piccolo rispetto a quello fornito nelle versioni precedenti del .NET Framework.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.

Gli GZipStream oggetti compressi scritti in un file con estensione. gz possono essere decompressi usando molti strumenti di compressione comuni. Tuttavia, questa classe non fornisce intrinsecamente funzionalità per l'aggiunta o l'estrazione di file da archivi zip.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.

La funzionalità di compressione DeflateStream in GZipStream ed è esposta come flusso.The compression functionality in DeflateStream and GZipStream is exposed as a stream. Poiché i dati vengono letti per byte, non è possibile eseguire più passaggi per determinare il metodo migliore per comprimere interi file o blocchi di dati di grandi dimensioni.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. Le DeflateStream classi GZipStream e sono ideali per le origini dati non compresse.The DeflateStream and GZipStream classes are best used on uncompressed sources of data. Se i dati di origine sono già compressi, l'utilizzo di queste classi può effettivamente aumentare le dimensioni del flusso.If the source data is already compressed, using these classes may actually increase the size of the stream.

Note per gli eredi

Quando si eredita da GZipStream, è necessario eseguire l'override dei membri CanSeekseguenti CanWrite:, CanReade.When you inherit from GZipStream, you must override the following members: CanSeek, CanWrite, and CanRead.

Costruttori

GZipStream(Stream, CompressionLevel)

Inizializza una nuova istanza della classe GZipStream usando il livello di compressione del flusso specificato.Initializes a new instance of the GZipStream class by using the specified stream and compression level.

GZipStream(Stream, CompressionLevel, Boolean)

Inizializza una nuova istanza della classe GZipStream usando il livello di compressione del flusso specificato. Facoltativamente mantiene aperto il flusso.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)

Inizializza una nuova istanza della classe GZipStream usando la modalità di compressione del flusso specificata.Initializes a new instance of the GZipStream class by using the specified stream and compression mode.

GZipStream(Stream, CompressionMode, Boolean)

Inizializza una nuova istanza della classe GZipStream usando la modalità di compressione del flusso specificata. Facoltativamente mantiene aperto il flusso.Initializes a new instance of the GZipStream class by using the specified stream and compression mode, and optionally leaves the stream open.

Proprietà

BaseStream

Ottiene un riferimento al flusso sottostante.Gets a reference to the underlying stream.

CanRead

Ottiene un valore che indica se il flusso supporta la lettura durante la decompressione di un file.Gets a value indicating whether the stream supports reading while decompressing a file.

CanSeek

Ottiene un valore che indica se il flusso supporta la ricerca.Gets a value indicating whether the stream supports seeking.

CanTimeout

Ottiene un valore che determina se il flusso corrente prevede il timeout.Gets a value that determines whether the current stream can time out.

(Ereditato da Stream)
CanWrite

Ottiene un valore che indica se il flusso supporta la scrittura.Gets a value indicating whether the stream supports writing.

Length

Questa proprietà non è supportata e genera sempre un'eccezione NotSupportedException.This property is not supported and always throws a NotSupportedException.

Position

Questa proprietà non è supportata e genera sempre un'eccezione NotSupportedException.This property is not supported and always throws a NotSupportedException.

ReadTimeout

Ottiene o imposta un valore, in millisecondi, che determina per quanto tempo il flusso tenterà la lettura prima del timeout.Gets or sets a value, in milliseconds, that determines how long the stream will attempt to read before timing out.

(Ereditato da Stream)
WriteTimeout

Ottiene o imposta un valore, in millisecondi, che determina per quanto tempo il flusso tenterà la scrittura prima del timeout.Gets or sets a value, in milliseconds, that determines how long the stream will attempt to write before timing out.

(Ereditato da Stream)

Metodi

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

Inizia un'operazione di lettura asincrona.Begins an asynchronous read operation. (Si consiglia di usare il metodo ReadAsync(Byte[], Int32, Int32).)(Consider using the ReadAsync(Byte[], Int32, Int32) method instead.)

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

Inizia un'operazione di scrittura asincrona.Begins an asynchronous write operation. (Si consiglia di usare il metodo WriteAsync(Byte[], Int32, Int32).)(Consider using the WriteAsync(Byte[], Int32, Int32) method instead.)

Close()

Chiude il flusso corrente e libera le risorse, come socket e handle di file, ad esso associate.Closes the current stream and releases any resources (such as sockets and file handles) associated with the current stream. Anziché chiamare questo metodo, assicurarsi che il flusso sia eliminato correttamente.Instead of calling this method, ensure that the stream is properly disposed.

(Ereditato da Stream)
CopyTo(Stream)

Legge i byte dal flusso corrente e li scrive in un altro flusso.Reads the bytes from the current stream and writes them to another stream.

(Ereditato da Stream)
CopyTo(Stream, Int32)

Legge i byte dal flusso GZip corrente e li scrive in un altro flusso, usando una dimensione di buffer specificata.Reads the bytes from the current GZip stream and writes them to another stream, using a specified buffer size.

CopyToAsync(Stream)

Legge in modo asincrono i byte dal flusso corrente e li scrive in un altro flusso.Asynchronously reads the bytes from the current stream and writes them to another stream.

(Ereditato da Stream)
CopyToAsync(Stream, CancellationToken)

Legge in modo asincrono i byte dal flusso corrente e li scrive in un altro flusso, usando un token di annullamento specificato.Asynchronously reads the bytes from the current stream and writes them to another stream, using a specified cancellation token.

(Ereditato da Stream)
CopyToAsync(Stream, Int32)

Legge in modo asincrono tutti i byte dal flusso corrente e li scrive in un altro flusso, utilizzando una dimensione di buffer specificata.Asynchronously reads the bytes from the current stream and writes them to another stream, using a specified buffer size.

(Ereditato da Stream)
CopyToAsync(Stream, Int32, CancellationToken)

Legge in modo asincrono i byte dal flusso GZip corrente e li scrive in un altro flusso, usando una dimensione di buffer specificata.Asynchronously reads the bytes from the current GZip stream and writes them to another stream, using a specified buffer size.

CreateObjRef(Type)

Consente di creare un oggetto che contiene tutte le informazioni rilevanti necessarie per la generazione del proxy utilizzato per effettuare la comunicazione con un oggetto remoto.Creates an object that contains all the relevant information required to generate a proxy used to communicate with a remote object.

(Ereditato da MarshalByRefObject)
CreateWaitHandle()

Alloca un oggetto WaitHandle.Allocates a WaitHandle object.

(Ereditato da Stream)
Dispose()

Rilascia tutte le risorse usate da Stream.Releases all resources used by the Stream.

(Ereditato da Stream)
Dispose(Boolean)

Rilascia le risorse non gestite usate da GZipStream e, facoltativamente, le risorse gestite.Releases the unmanaged resources used by the GZipStream and optionally releases the managed resources.

DisposeAsync()

Consente di liberare in modo asincrono le risorse non gestite utilizzate da GZipStream.Asynchronously releases the unmanaged resources used by the GZipStream.

EndRead(IAsyncResult)

Attende il completamento della lettura asincrona in sospeso.Waits for the pending asynchronous read to complete. (Si consiglia di usare il metodo ReadAsync(Byte[], Int32, Int32).)(Consider using the ReadAsync(Byte[], Int32, Int32) method instead.)

EndWrite(IAsyncResult)

Gestisce la fine di un'operazione di scrittura asincrona.Handles the end of an asynchronous write operation. (Si consiglia di usare il metodo WriteAsync(Byte[], Int32, Int32).)(Consider using the WriteAsync(Byte[], Int32, Int32) method instead.)

Equals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente.Determines whether the specified object is equal to the current object.

(Ereditato da Object)
Flush()

L'implementazione corrente di questo metodo non presenta alcuna funzionalità.The current implementation of this method has no functionality.

FlushAsync()

Cancella in modo asincrono i dati di tutti i buffer del flusso e determina la scrittura dei dati memorizzati nel buffer nel dispositivo sottostante.Asynchronously clears all buffers for this stream and causes any buffered data to be written to the underlying device.

(Ereditato da Stream)
FlushAsync(CancellationToken)

Cancella in modo asincrono tutti i buffer per questo flusso GZip, causa la scrittura degli eventuali dati memorizzati nel buffer nel dispositivo sottostante e monitora le richieste di annullamento.Asynchronously clears all buffers for this GZip stream, causes any buffered data to be written to the underlying device, and monitors cancellation requests.

GetHashCode()

Funge da funzione hash predefinita.Serves as the default hash function.

(Ereditato da Object)
GetLifetimeService()

Consente di recuperare l'oggetto servizio di durata corrente per controllare i criteri di durata per l'istanza.Retrieves the current lifetime service object that controls the lifetime policy for this instance.

(Ereditato da MarshalByRefObject)
GetType()

Ottiene l'oggetto Type dell'istanza corrente.Gets the Type of the current instance.

(Ereditato da Object)
InitializeLifetimeService()

Ottiene un oggetto servizio di durata per controllare i criteri di durata per questa istanza.Obtains a lifetime service object to control the lifetime policy for this instance.

(Ereditato da MarshalByRefObject)
MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.Creates a shallow copy of the current Object.

(Ereditato da Object)
MemberwiseClone(Boolean)

Crea una copia dei riferimenti dell'oggetto MarshalByRefObject corrente.Creates a shallow copy of the current MarshalByRefObject object.

(Ereditato da MarshalByRefObject)
ObjectInvariant()

Fornisce supporto per un oggetto Contract.Provides support for a Contract.

(Ereditato da Stream)
Read(Byte[], Int32, Int32)

Legge un numero di byte decompressi nella matrice di byte specificata.Reads a number of decompressed bytes into the specified byte array.

Read(Span<Byte>)

Legge una sequenza di byte dal flusso GZip corrente in un intervallo di byte e fa avanzare la posizione all'interno del flusso GZip in base al numero di byte letti.Reads a sequence of bytes from the current GZip stream into a byte span and advances the position within the GZip stream by the number of bytes read.

ReadAsync(Byte[], Int32, Int32)

Legge in modo asincrono una sequenza di byte dal flusso corrente e passa alla posizione successiva nel flusso in base al numero di byte letti.Asynchronously reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read.

(Ereditato da Stream)
ReadAsync(Byte[], Int32, Int32, CancellationToken)

Legge in modo asincrono una sequenza di byte dal flusso GZip corrente in una matrice di byte, fa avanzare la posizione all'interno del flusso GZip in base al numero di byte letti e monitora le richieste di annullamento.Asynchronously reads a sequence of bytes from the current GZip stream into a byte array, advances the position within the GZip stream by the number of bytes read, and monitors cancellation requests.

ReadAsync(Memory<Byte>, CancellationToken)

Legge in modo asincrono una sequenza di byte dal flusso GZip corrente in un intervallo di memoria di byte, fa avanzare la posizione all'interno del flusso GZip in base al numero di byte letti e monitora le richieste di annullamento.Asynchronously reads a sequence of bytes from the current GZip stream into a byte memory region, advances the position within the GZip stream by the number of bytes read, and monitors cancellation requests.

ReadByte()

Legge un byte dal flusso GZip e sposta in avanti la posizione corrente all'interno del flusso di un byte o restituisce -1 se si trova alla fine del flusso GZip.Reads a byte from the GZip stream and advances the position within the stream by one byte, or returns -1 if at the end of the GZip stream.

Seek(Int64, SeekOrigin)

Questa proprietà non è supportata e genera sempre un'eccezione NotSupportedException.This property is not supported and always throws a NotSupportedException.

SetLength(Int64)

Questa proprietà non è supportata e genera sempre un'eccezione NotSupportedException.This property is not supported and always throws a NotSupportedException.

ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.Returns a string that represents the current object.

(Ereditato da Object)
Write(Byte[], Int32, Int32)

Scrive i byte compressi nel flusso GZip sottostante dalla matrice di byte specificata.Writes compressed bytes to the underlying GZip stream from the specified byte array.

Write(ReadOnlySpan<Byte>)

Scrive una sequenza di byte nel flusso GZip corrente da un intervallo di byte di sola lettura e sposta in avanti la posizione corrente nel flusso GZip in base al numero di byte scritti.Writes a sequence of bytes to the current GZip stream from a read-only byte span and advances the current position within this GZip stream by the number of bytes written.

WriteAsync(Byte[], Int32, Int32)

Scrive in modo asincrono una sequenza di byte nel flusso corrente e passa alla posizione successiva nel flusso in base al numero di byte scritti.Asynchronously writes a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written.

(Ereditato da Stream)
WriteAsync(Byte[], Int32, Int32, CancellationToken)

Scrive in modo asincrono i byte compressi nel flusso GZip sottostante dalla matrice di byte specificata.Asynchronously writes compressed bytes to the underlying GZip stream from the specified byte array.

WriteAsync(ReadOnlyMemory<Byte>, CancellationToken)

Scrive in modo asincrono i byte compressi nel flusso GZip sottostante dall'area di memoria di byte di sola lettura specificata.Asynchronously writes compressed bytes to the underlying GZip stream from the specified read-only byte memory region.

WriteByte(Byte)

Scrive un byte nella posizione corrente del flusso e sposta in avanti di un byte la posizione del flusso.Writes a byte to the current position in the stream and advances the position within the stream by one byte.

(Ereditato da Stream)

Implementazioni dell'interfaccia esplicita

IDisposable.Dispose()

Rilascia tutte le risorse usate da Stream.Releases all resources used by the Stream.

(Ereditato da Stream)

Metodi di estensione

AsInputStream(Stream)

Converte un flusso gestito in .NET per app di Windows Store in un flusso di input in Windows Runtime.Converts a managed stream in the .NET for Windows Store apps to an input stream in the Windows Runtime.

AsOutputStream(Stream)

Converte un flusso gestito in .NET per app di Windows Store in un flusso di output in Windows Runtime.Converts a managed stream in the .NET for Windows Store apps to an output stream in the Windows Runtime.

AsRandomAccessStream(Stream)

Converte il flusso specificato in un flusso di accesso casuale.Converts the specified stream to a random access stream.

Si applica a