Classe GZipStream (System.IO.Compression)

Cambia visualizzazione:
ScriptFree
Riferimento a .NET Framework
Classe GZipStream
Il presente articolo è stato tradotto manualmente. Per visualizzare questa pagina e contemporaneamente visualizzarne il contenuto in lingua inglese, passare alla visualizzazione semplificata.

Fornisce i metodi e le proprietà utilizzate per comprimere e decomprimere i flussi.

Gerarchia di ereditarietà

System.Object
  System.MarshalByRefObject
    System.IO.Stream
      System.IO.Compression.GZipStream

Spazio dei nomi:  System.IO.Compression
Assembly:  System (in System.dll)
Sintassi

Visual Basic
Public Class GZipStream _
	Inherits Stream
C#
public class GZipStream : Stream
Visual C++
public ref class GZipStream : public Stream
F#
type GZipStream =  
    class
        inherit Stream
    end

Il tipo GZipStream espone i seguenti membri.

Costruttori

  Nome Descrizione
Metodo pubblico Supportato da XNA Framework GZipStream(Stream, CompressionMode) Inizializza una nuova istanza della classe GZipStream utilizzando il flusso e il valore di CompressionMode specificati.
Metodo pubblico Supportato da XNA Framework GZipStream(Stream, CompressionMode, Boolean) Inizializza una nuova istanza della classe GZipStream utilizzando il flusso e il valore di CompressionMode specificati e un valore che indica se il flusso deve essere lasciato aperto.
In alto
Proprietà

  Nome Descrizione
Proprietà pubblica Supportato da XNA Framework BaseStream Ottiene un riferimento al flusso sottostante.
Proprietà pubblica Supportato da XNA Framework CanRead Ottiene un valore che indica se il flusso supporta la lettura durante la decompressione di un file. (Esegue l'override di Stream.CanRead).
Proprietà pubblica Supportato da XNA Framework CanSeek Ottiene un valore che indica se il flusso supporta la ricerca. (Esegue l'override di Stream.CanSeek).
Proprietà pubblica Supportato da XNA Framework CanTimeout Ottiene un valore che determina se il flusso corrente prevede il timeout. (Ereditato da Stream)
Proprietà pubblica Supportato da XNA Framework CanWrite Ottiene un valore che indica se il flusso supporta la scrittura. (Esegue l'override di Stream.CanWrite).
Proprietà pubblica Supportato da XNA Framework Length Questa proprietà non è supportata e genera sempre un'eccezione NotSupportedException. (Esegue l'override di Stream.Length).
Proprietà pubblica Supportato da XNA Framework Position Questa proprietà non è supportata e genera sempre un'eccezione NotSupportedException. (Esegue l'override di Stream.Position).
Proprietà pubblica Supportato da XNA Framework ReadTimeout Ottiene o imposta un valore, in millisecondi, che determina per quanto tempo il flusso tenterà la lettura prima del timeout. (Ereditato da Stream)
Proprietà pubblica Supportato da XNA Framework WriteTimeout Ottiene o imposta un valore, in millisecondi, che determina per quanto tempo il flusso tenterà la scrittura prima del timeout. (Ereditato da Stream)
In alto
Metodi

  Nome Descrizione
Metodo pubblico Supportato da XNA Framework BeginRead Inizia un'operazione di lettura asincrona. (Esegue l'override di Stream.BeginRead(Byte[], Int32, Int32, AsyncCallback, Object)).
Metodo pubblico Supportato da XNA Framework BeginWrite Inizia un'operazione di scrittura asincrona. (Esegue l'override di Stream.BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object)).
Metodo pubblico Supportato da XNA Framework Close Chiude il flusso corrente e rende disponibili risorse, come socket e handle di file, a esso associate. (Ereditato da Stream)
Metodo pubblico CopyTo(Stream) Legge i byte dal flusso corrente e li scrive nel flusso di destinazione. (Ereditato da Stream)
Metodo pubblico CopyTo(Stream, Int32) Legge tutti i byte dal flusso corrente e li scrive in un flusso di destinazione, utilizzando una dimensione di buffer specificata. (Ereditato da Stream)
Metodo pubblico CreateObjRef 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. (Ereditato da MarshalByRefObject)
Metodo protetto Supportato da XNA Framework CreateWaitHandle Obsoleta. Assegna un oggetto WaitHandle. (Ereditato da Stream)
Metodo pubblico Supportato da XNA Framework Dispose() Rilascia tutte le risorse utilizzate dalla classe Stream. (Ereditato da Stream)
Metodo protetto Supportato da XNA Framework Dispose(Boolean) Rilascia le risorse non gestite utilizzate dalla classe GZipStream ed eventualmente rilascia le risorse gestite. (Esegue l'override di Stream.Dispose(Boolean)).
Metodo pubblico Supportato da XNA Framework EndRead Attende il completamento della lettura asincrona in sospeso. (Esegue l'override di Stream.EndRead(IAsyncResult)).
Metodo pubblico Supportato da XNA Framework EndWrite Gestisce la fine di un'operazione di scrittura asincrona. (Esegue l'override di Stream.EndWrite(IAsyncResult)).
Metodo pubblico Supportato da XNA Framework Equals(Object) Determina se l'oggetto Object specificato è uguale all'oggetto Object corrente. (Ereditato da Object)
Metodo protetto Supportato da XNA Framework Finalize Consente a un oggetto di provare a liberare risorse ed eseguire altre operazioni di pulitura prima che l'oggetto stesso venga recuperato dalla procedura di Garbage Collection. (Ereditato da Object)
Metodo pubblico Supportato da XNA Framework Flush Scarica il contenuto del buffer interno dell'oggetto GZipStream corrente nel flusso sottostante. (Esegue l'override di Stream.Flush()).
Metodo pubblico Supportato da XNA Framework GetHashCode Funge da funzione hash per un determinato tipo. (Ereditato da Object)
Metodo pubblico GetLifetimeService Consente di recuperare l'oggetto servizio di durata corrente per controllare i criteri di durata per l'istanza. (Ereditato da MarshalByRefObject)
Metodo pubblico Supportato da XNA Framework GetType Ottiene l'oggetto Type dell'istanza corrente. (Ereditato da Object)
Metodo pubblico InitializeLifetimeService Consente di ottenere un oggetto servizio di durata per il controllo dei criteri di durata per l'istanza. (Ereditato da MarshalByRefObject)
Metodo protetto Supportato da XNA Framework MemberwiseClone() Consente di creare una copia dei riferimenti dell'oggetto Object corrente. (Ereditato da Object)
Metodo protetto MemberwiseClone(Boolean) Crea una copia dei riferimenti dell'oggetto MarshalByRefObject corrente. (Ereditato da MarshalByRefObject)
Metodo protetto ObjectInvariant Infrastruttura. Fornisce supporto per un Contract. (Ereditato da Stream)
Metodo pubblico Supportato da XNA Framework Read Legge un numero di byte decompressi nella matrice di byte specificata. (Esegue l'override di Stream.Read(Byte[], Int32, Int32)).
Metodo pubblico Supportato da XNA Framework ReadByte Legge un byte dal flusso e sposta in avanti la posizione corrente all'interno del flusso di un byte o restituisce -1 se si trova alla fine del flusso. (Ereditato da Stream)
Metodo pubblico Supportato da XNA Framework Seek Questa proprietà non è supportata e genera sempre un'eccezione NotSupportedException. (Esegue l'override di Stream.Seek(Int64, SeekOrigin)).
Metodo pubblico Supportato da XNA Framework SetLength Questa proprietà non è supportata e genera sempre un'eccezione NotSupportedException. (Esegue l'override di Stream.SetLength(Int64)).
Metodo pubblico Supportato da XNA Framework ToString Restituisce una stringa che rappresenta l'oggetto corrente. (Ereditato da Object)
Metodo pubblico Supportato da XNA Framework Write Scrive i byte compressi nel flusso sottostante dalla matrice di byte specificata. (Esegue l'override di Stream.Write(Byte[], Int32, Int32)).
Metodo pubblico Supportato da XNA Framework WriteByte Scrive un byte nella posizione corrente del flusso e sposta in avanti di un byte la posizione del flusso. (Ereditato da Stream)
In alto
Note

Questa classe rappresenta il formato dati gzip, che utilizza un algoritmo standard del settore per la compressione e la decompressione di file senza perdita dei dati. Il formato include un valore di controllo di ridondanza ciclico per il rilevamento di dati danneggiati. Il formato dati gzip utilizza lo stesso algoritmo della classe DeflateStream, ma può essere esteso ai fini dell'utilizzo di altri formati di compressione. È possibile implementare il formato immediatamente in modo non previsto nei brevetti.

Gli oggetti GZipStream compressi scritti in un file con estensione gz possono essere decompressi utilizzando numerosi strumenti di compressione comuni. Questa classe non fornisce tuttavia di per sé la funzionalità per l'aggiunta o l'estrazione di file da archivi zip.

La funzionalità di compressione di DeflateStream e GZipStream viene esposta come flusso. I dati vengono letti byte per byte, pertanto non è possibile eseguire più passaggi per determinare il modo ottimale per comprimere file interi o blocchi estesi di dati. È consigliabile utilizzare le classi DeflateStream e GZipStream su origini non compresse di dati. Se i dati di origine sono già compressi, l'utilizzo di queste classi può comportare un aumento della dimensione del flusso.

Note per gli eredi

Quando si eredita dalla classe GZipStream, è necessario eseguire l'override dei seguenti membri:CanSeek, CanWrite e CanRead.

Esempi

Nell'esempio seguente viene illustrato come utilizzare la classe GZipStream per comprimere e decomprimere una directory di file.

Visual Basic

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


C#

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);

                    }
                }
            }
        }

    }
}


Informazioni sulla versione

.NET Framework

Supportato in: 4, 3.5, 3.0, 2.0

.NET Framework Client Profile

Supportato in: 4, 3.5 SP1
Piattaforme

Windows 7, Windows Vista SP1 o versione successiva, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (componenti di base del server non supportati), Windows Server 2008 R2 (componenti di base del server supportati con SP1 o versione successiva), Windows Server 2003 SP2

.NET Framework non supporta tutte le versioni di ciascuna piattaforma. Per un elenco delle versioni supportate, vedere Requisiti di sistema di .NET Framework.
Codice thread safe

Qualsiasi membro static (Shared in Visual Basic) pubblico di questo tipo è thread-safe. I membri di istanza non sono garantiti come thread-safe.
Vedere anche

Riferimenti