DeflateStream Конструкторы

Определение

Инициализирует новый экземпляр класса DeflateStream.Initializes a new instance of the DeflateStream class.

Перегрузки

DeflateStream(Stream, CompressionLevel)

Инициализирует новый экземпляр класса DeflateStream с использованием указанного потока и уровня сжатия.Initializes a new instance of the DeflateStream class by using the specified stream and compression level.

DeflateStream(Stream, CompressionMode)

Инициализирует новый экземпляр класса DeflateStream с использованием указанного потока и режима сжатия.Initializes a new instance of the DeflateStream class by using the specified stream and compression mode.

DeflateStream(Stream, CompressionLevel, Boolean)

Инициализирует новый экземпляр класса DeflateStream с помощью указанного потока и уровня сжатия, а также при необходимости оставляет поток открытым.Initializes a new instance of the DeflateStream class by using the specified stream and compression level, and optionally leaves the stream open.

DeflateStream(Stream, CompressionMode, Boolean)

Инициализирует новый экземпляр класса DeflateStream с помощью указанного потока и режима сжатия, а также при необходимости оставляет поток открытым.Initializes a new instance of the DeflateStream class by using the specified stream and compression mode, and optionally leaves the stream open.

Комментарии

DeflateStream Использование класса для сжатия файла, размер которого превышает 4 ГБ, вызовет исключение.Using the DeflateStream class to compress a file larger than 4 GB will cause an exception.

DeflateStream(Stream, CompressionLevel)

Инициализирует новый экземпляр класса DeflateStream с использованием указанного потока и уровня сжатия.Initializes a new instance of the DeflateStream class by using the specified stream and compression level.

public:
 DeflateStream(System::IO::Stream ^ stream, System::IO::Compression::CompressionLevel compressionLevel);
public DeflateStream (System.IO.Stream stream, System.IO.Compression.CompressionLevel compressionLevel);
new System.IO.Compression.DeflateStream : System.IO.Stream * System.IO.Compression.CompressionLevel -> System.IO.Compression.DeflateStream

Параметры

stream
Stream

Поток для сжатия.The stream to compress.

compressionLevel
CompressionLevel

Одно из значений перечисления, указывающее, чему отдается приоритет при сжатии потока: скорости или эффективности сжатия.One of the enumeration values that indicates whether to emphasize speed or compression efficiency when compressing the stream.

Исключения

Свойство stream имеет значение null.stream is null.

Поток не поддерживает операции записи, например сжатие.The stream does not support write operations such as compression. (Свойство CanWrite в объекте потока имеет значение false).(The CanWrite property on the stream object is false.)

Примеры

В следующем примере показано, как задать уровень сжатия при создании DeflateStream объекта.The following example shows how to set the compression level when creating a DeflateStream object.

using System;
using System.Collections.Generic;
using System.IO;
using System.IO.Compression;

namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            string directoryPath = @"c:\users\public\reports";
            DirectoryInfo directorySelected = new DirectoryInfo(directoryPath);

            foreach (FileInfo fileToCompress in directorySelected.EnumerateFiles())
            {
                Compress(fileToCompress);
            }
        }

        public static void Compress(FileInfo fileToCompress)
        {
            using (FileStream originalFileStream = fileToCompress.OpenRead())
            {
                if ((File.GetAttributes(fileToCompress.FullName) & FileAttributes.Hidden) != FileAttributes.Hidden & fileToCompress.Extension != ".cmp")
                {
                    using (FileStream compressedFileStream = File.Create(fileToCompress.FullName + ".cmp"))
                    {
                        using (DeflateStream compressionStream = new DeflateStream(compressedFileStream, CompressionLevel.Fastest))
                        {
                            originalFileStream.CopyTo(compressionStream);
                        }
                    }
                }
            }
        }
    }
}
Imports System.IO
Imports System.IO.Compression

Module Module1

    Sub Main()
        Dim directoryPath As String = "c:\users\public\reports"
        Dim directorySelected As DirectoryInfo = New DirectoryInfo(directoryPath)

        For Each fileToCompress As FileInfo In directorySelected.EnumerateFiles()
            Compress(fileToCompress)
        Next
    End Sub

    Public Sub Compress(fileToCompress As FileInfo)
        Using originalFileStream As FileStream = fileToCompress.OpenRead()
            If ((File.GetAttributes(fileToCompress.FullName) & FileAttributes.Hidden) <> FileAttributes.Hidden And fileToCompress.Extension <> ".cmp") Then
                Using compressedFileStream As FileStream = File.Create(fileToCompress.FullName + ".cmp")
                    Using compressionStream As DeflateStream = New DeflateStream(compressedFileStream, CompressionLevel.Fastest)
                        originalFileStream.CopyTo(compressionStream)
                    End Using
                End Using
            End If
        End Using
    End Sub

End Module

Комментарии

Этот конструктор используется, если нужно указать, важна ли степень эффективности или скорости сжатия для экземпляра DeflateStream класса.You use this constructor when you want to specify whether compression efficiency or speed is more important for an instance of the DeflateStream class.

Эта перегрузка конструктора использует режим Compressсжатия.This constructor overload uses the compression mode Compress. Чтобы задать для режима сжатия другое значение, используйте DeflateStream(Stream, CompressionMode) перегрузку или. DeflateStream(Stream, CompressionMode, Boolean)To set the compression mode to another value, use the DeflateStream(Stream, CompressionMode) or DeflateStream(Stream, CompressionMode, Boolean) overload.

DeflateStream(Stream, CompressionMode)

Инициализирует новый экземпляр класса DeflateStream с использованием указанного потока и режима сжатия.Initializes a new instance of the DeflateStream class by using the specified stream and compression mode.

public:
 DeflateStream(System::IO::Stream ^ stream, System::IO::Compression::CompressionMode mode);
public DeflateStream (System.IO.Stream stream, System.IO.Compression.CompressionMode mode);
new System.IO.Compression.DeflateStream : System.IO.Stream * System.IO.Compression.CompressionMode -> System.IO.Compression.DeflateStream

Параметры

stream
Stream

Поток, который нужно сжать или распаковать.The stream to compress or decompress.

mode
CompressionMode

Одно из значений перечисления, указывающее, нужно ли выполнить сжатие или распаковку потока.One of the enumeration values that indicates whether to compress or decompress the stream.

Исключения

streamnull.stream is null.

mode не является допустимым значением CompressionMode.mode is not a valid CompressionMode value.

- или --or- Свойство CompressionMode имеет значение Compress; свойство CanWrite имеет значение false.CompressionMode is Compress and CanWrite is false.

- или --or- Свойство CompressionMode имеет значение Decompress; свойство CanRead имеет значение false.CompressionMode is Decompress and CanRead is false.

Примеры

В следующем примере показано, как использовать DeflateStream класс для сжатия и распаковки файла.The following example shows how to use the DeflateStream class to compress and decompress a file.

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

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

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

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

                FileInfo info = new FileInfo(directoryPath + "\\" + file.Name + ".cmp");
                Console.WriteLine("Compressed {0} from {1} to {2} bytes.", file.Name, file.Length, info.Length);
            }
        }
    }

    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 (DeflateStream decompressionStream = new DeflateStream(originalFileStream, CompressionMode.Decompress))
                {
                    decompressionStream.CopyTo(decompressedFileStream);
                    Console.WriteLine("Decompressed: {0}", fileToDecompress.Name);
                }
            }
        }
    }
}
Imports System.IO
Imports System.IO.Compression

Public Class Program
    Shared directoryPath As String = "c:\temp"
    Public Shared Sub Main()

        Dim directorySelected As New DirectoryInfo(directoryPath)
        Compress(directorySelected)


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

    Public Shared Sub Compress(directorySelected As DirectoryInfo)

        For Each file__1 As FileInfo In directorySelected.GetFiles("*.xml")
            Using originalFileStream As FileStream = file__1.OpenRead()
                If (File.GetAttributes(file__1.FullName) And FileAttributes.Hidden) <> FileAttributes.Hidden And file__1.Extension <> ".cmp" Then
                    Using compressedFileStream As FileStream = File.Create(file__1.FullName & ".cmp")
                        Using compressionStream As Compression.DeflateStream = New DeflateStream(compressedFileStream, CompressionMode.Compress)
                            originalFileStream.CopyTo(compressionStream)
                        End Using
                    End Using

                    Dim info As New FileInfo(directoryPath & "\" & file__1.Name & ".cmp")
                    Console.WriteLine("Compressed {0} from {1} to {2} bytes.", file__1.Name, file__1.Length, info.Length)
                End If
            End Using
        Next
    End Sub

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

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

Комментарии

По умолчанию DeflateStream владеет базовым потоком, поэтому закрытие потока также закрывает базовый поток.By default, DeflateStream owns the underlying stream, so closing the stream 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.

Если экземпляр DeflateStream класса создается mode с параметром Compress, равным, сведения о заголовке вставляются немедленно.If an instance of the DeflateStream class is created with the mode parameter equal to Compress, header information is inserted immediately. Если дальнейшие действия не выполняются, поток отображается как допустимый, пустой, сжатый файл.If no further action occurs, the stream appears as a valid, empty, compressed file.

DeflateStream Использование класса для сжатия файла, размер которого превышает 4 ГБ, вызывает исключение.Using the DeflateStream class to compress a file larger than 4 GB raises an exception.

По умолчанию уровень сжатия установлен в Optimal , если задан Compressрежим сжатия.By default, the compression level is set to Optimal when the compression mode is Compress.

DeflateStream(Stream, CompressionLevel, Boolean)

Инициализирует новый экземпляр класса DeflateStream с помощью указанного потока и уровня сжатия, а также при необходимости оставляет поток открытым.Initializes a new instance of the DeflateStream class by using the specified stream and compression level, and optionally leaves the stream open.

public:
 DeflateStream(System::IO::Stream ^ stream, System::IO::Compression::CompressionLevel compressionLevel, bool leaveOpen);
public DeflateStream (System.IO.Stream stream, System.IO.Compression.CompressionLevel compressionLevel, bool leaveOpen);
new System.IO.Compression.DeflateStream : System.IO.Stream * System.IO.Compression.CompressionLevel * bool -> System.IO.Compression.DeflateStream

Параметры

stream
Stream

Поток для сжатия.The stream to compress.

compressionLevel
CompressionLevel

Одно из значений перечисления, указывающее, чему отдается приоритет при сжатии потока: скорости или эффективности сжатия.One of the enumeration values that indicates whether to emphasize speed or compression efficiency when compressing the stream.

leaveOpen
Boolean

Значение true, чтобы оставить объект потока открытым после удаления объекта DeflateStream; в противном случае — значение false.true to leave the stream object open after disposing the DeflateStream object; otherwise, false.

Исключения

streamnull.stream is null.

Поток не поддерживает операции записи, например сжатие.The stream does not support write operations such as compression. (Свойство CanWrite в объекте потока имеет значение false).(The CanWrite property on the stream object is false.)

Примеры

В следующем примере показано, как задать уровень сжатия при создании DeflateStream объекта и оставить поток открытым.The following example shows how to set the compression level when creating a DeflateStream object and how to leave the stream open.

using System;
using System.Collections.Generic;
using System.IO;
using System.IO.Compression;

namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            string directoryPath = @"c:\users\public\reports";
            DirectoryInfo directorySelected = new DirectoryInfo(directoryPath);

            foreach (FileInfo fileToCompress in directorySelected.EnumerateFiles())
            {
                Compress(fileToCompress);
            }
        }

        public static void Compress(FileInfo fileToCompress)
        {
            using (FileStream originalFileStream = fileToCompress.OpenRead())
            {
                if ((File.GetAttributes(fileToCompress.FullName) & FileAttributes.Hidden) != FileAttributes.Hidden & fileToCompress.Extension != ".cmp")
                {
                    using (FileStream compressedFileStream = File.Create(fileToCompress.FullName + ".cmp"))
                    {
                        using (DeflateStream compressionStream = new DeflateStream(compressedFileStream, CompressionLevel.Fastest, true))
                        {
                            originalFileStream.CopyTo(compressionStream);
                        }
                        Console.WriteLine(string.Format("file compressed to {0} bytes", compressedFileStream.Length));
                    }
                }
            }
        }
    }
}
Imports System.IO
Imports System.IO.Compression

Module Module1

    Sub Main()
        Dim directoryPath As String = "c:\users\public\reports"
        Dim directorySelected As DirectoryInfo = New DirectoryInfo(directoryPath)

        For Each fileToCompress As FileInfo In directorySelected.EnumerateFiles()
            Compress(fileToCompress)
        Next
    End Sub

    Public Sub Compress(fileToCompress As FileInfo)
        Using originalFileStream As FileStream = fileToCompress.OpenRead()
            If ((File.GetAttributes(fileToCompress.FullName) & FileAttributes.Hidden) <> FileAttributes.Hidden And fileToCompress.Extension <> ".cmp") Then
                Using compressedFileStream As FileStream = File.Create(fileToCompress.FullName + ".cmp")
                    Using compressionStream As DeflateStream = New DeflateStream(compressedFileStream, CompressionLevel.Fastest, True)
                        originalFileStream.CopyTo(compressionStream)
                    End Using
                    Console.WriteLine(String.Format("file compressed to {0} bytes", compressedFileStream.Length))
                End Using
            End If
        End Using
    End Sub

End Module

Комментарии

Этот конструктор используется, если нужно указать, важна ли степень эффективности или скорости сжатия для экземпляра DeflateStream класса, и следует ли оставить объект потока открытым после удаления DeflateStream объекта.You use this constructor when you want to specify whether compression efficiency or speed is more important for an instance of the DeflateStream class, and whether to leave the stream object open after disposing the DeflateStream object.

Эта перегрузка конструктора использует режим Compressсжатия.This constructor overload uses the compression mode Compress. Чтобы задать для режима сжатия другое значение, используйте DeflateStream(Stream, CompressionMode) перегрузку или. DeflateStream(Stream, CompressionMode, Boolean)To set the compression mode to another value, use the DeflateStream(Stream, CompressionMode) or DeflateStream(Stream, CompressionMode, Boolean) overload.

DeflateStream(Stream, CompressionMode, Boolean)

Инициализирует новый экземпляр класса DeflateStream с помощью указанного потока и режима сжатия, а также при необходимости оставляет поток открытым.Initializes a new instance of the DeflateStream class by using the specified stream and compression mode, and optionally leaves the stream open.

public:
 DeflateStream(System::IO::Stream ^ stream, System::IO::Compression::CompressionMode mode, bool leaveOpen);
public DeflateStream (System.IO.Stream stream, System.IO.Compression.CompressionMode mode, bool leaveOpen);
new System.IO.Compression.DeflateStream : System.IO.Stream * System.IO.Compression.CompressionMode * bool -> System.IO.Compression.DeflateStream

Параметры

stream
Stream

Поток, который нужно сжать или распаковать.The stream to compress or decompress.

mode
CompressionMode

Одно из значений перечисления, указывающее, нужно ли выполнить сжатие или распаковку потока.One of the enumeration values that indicates whether to compress or decompress the stream.

leaveOpen
Boolean

Значение true, чтобы оставить поток открытым после удаления объекта DeflateStream; в противном случае — значение false.true to leave the stream open after disposing the DeflateStream object; otherwise, false.

Исключения

Свойство stream имеет значение null.stream is null.

mode не является допустимым значением CompressionMode.mode is not a valid CompressionMode value.

- или --or- Свойство CompressionMode имеет значение Compress; свойство CanWrite имеет значение false.CompressionMode is Compress and CanWrite is false.

- или --or- Свойство CompressionMode имеет значение Decompress; свойство CanRead имеет значение false.CompressionMode is Decompress and CanRead is false.

Примеры

В следующем примере кода показано, как использовать DeflateStream класс для сжатия и распаковки файла.The following code example shows how to use the DeflateStream class to compress and decompress a file.

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

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

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

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

                FileInfo info = new FileInfo(directoryPath + "\\" + file.Name + ".cmp");
                Console.WriteLine("Compressed {0} from {1} to {2} bytes.", file.Name, file.Length, info.Length);
            }
        }
    }

    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 (DeflateStream decompressionStream = new DeflateStream(originalFileStream, CompressionMode.Decompress))
                {
                    decompressionStream.CopyTo(decompressedFileStream);
                    Console.WriteLine("Decompressed: {0}", fileToDecompress.Name);
                }
            }
        }
    }
}
Imports System.IO
Imports System.IO.Compression

Public Class Program
    Shared directoryPath As String = "c:\temp"
    Public Shared Sub Main()

        Dim directorySelected As New DirectoryInfo(directoryPath)
        Compress(directorySelected)


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

    Public Shared Sub Compress(directorySelected As DirectoryInfo)

        For Each file__1 As FileInfo In directorySelected.GetFiles("*.xml")
            Using originalFileStream As FileStream = file__1.OpenRead()
                If (File.GetAttributes(file__1.FullName) And FileAttributes.Hidden) <> FileAttributes.Hidden And file__1.Extension <> ".cmp" Then
                    Using compressedFileStream As FileStream = File.Create(file__1.FullName & ".cmp")
                        Using compressionStream As Compression.DeflateStream = New DeflateStream(compressedFileStream, CompressionMode.Compress)
                            originalFileStream.CopyTo(compressionStream)
                        End Using
                    End Using

                    Dim info As New FileInfo(directoryPath & "\" & file__1.Name & ".cmp")
                    Console.WriteLine("Compressed {0} from {1} to {2} bytes.", file__1.Name, file__1.Length, info.Length)
                End If
            End Using
        Next
    End Sub

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

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

Комментарии

По умолчанию DeflateStream владеет базовым потоком, поэтому закрытие потока также закрывает базовый поток.By default, DeflateStream owns the underlying stream, so closing the stream 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.

Если экземпляр DeflateStream класса создается mode с параметром Compress, равным, сведения о заголовке вставляются немедленно.If an instance of the DeflateStream class is created with the mode parameter equal to Compress, header information is inserted immediately. Если дальнейшие действия не выполняются, поток отображается как допустимый, пустой, сжатый файл.If no further action occurs, the stream appears as a valid, empty, compressed file.

DeflateStream Использование класса для сжатия файла, размер которого превышает 4 ГБ, вызывает исключение.Using the DeflateStream class to compress a file larger than 4 GB raises an exception.

По умолчанию уровень сжатия установлен в Optimal , если задан Compressрежим сжатия.By default, the compression level is set to Optimal when the compression mode is Compress.

Применяется к