Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
This constructor overload uses the compression mode <xref:System.IO.Compression.CompressionMode.Compress>. To set the compression mode to another value, use the <xref:System.IO.Compression.DeflateStream.%23ctor%28System.IO.Stream%2CSystem.IO.Compression.CompressionMode%29> or <xref:System.IO.Compression.DeflateStream.%23ctor%28System.IO.Stream%2CSystem.IO.Compression.CompressionMode%2CSystem.Boolean%29> overload.

## Examples

The following example shows how to set the compression level when creating a <xref:System.IO.Compression.DeflateStream> object and how to leave the stream open.

:::code language="csharp" source="~/samples/snippets/csharp/System.IO.Compression/Deflate/FileCompressionLevelExample.cs" id="Snippet1":::
:::code language="vb" source="~/samples/snippets/visualbasic/System.IO.Compression/Deflate/FileCompressionLevelExample.vb" id="Snippet1":::

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,6 @@ By default, the compression level is set to <xref:System.IO.Compression.Compress

The following example shows how to use the <xref:System.IO.Compression.DeflateStream> class to compress and decompress a file.

:::code language="csharp" source="~/samples/snippets/csharp/VS_Snippets_CLR/IO.Compression.Deflate1/CS/deflatetest.cs" id="Snippet1":::
:::code language="vb" source="~/samples/snippets/visualbasic/VS_Snippets_CLR/IO.Compression.Deflate1/VB/deflatetest.vb" id="Snippet1":::
:::code language="csharp" source="~/samples/snippets/csharp/System.IO.Compression/Deflate/FileCompressionModeExample.cs" id="Snippet1":::
:::code language="vb" source="~/samples/snippets/visualbasic/System.IO.Compression/Deflate/FileCompressionModeExample.vb" id="Snippet1":::

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@

This class represents the Deflate algorithm, which is an industry-standard algorithm for lossless file compression and decompression. Starting with the .NET Framework 4.5, the <xref:System.IO.Compression.DeflateStream> class uses the zlib library. 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.

This class does not inherently provide functionality for adding files to or extracting files from zip archives. To work with zip archives, use the <xref:System.IO.Compression.ZipArchive> and the <xref:System.IO.Compression.ZipArchiveEntry> classes.
Expand All @@ -9,7 +8,7 @@ The compression functionality in <xref:System.IO.Compression.DeflateStream> and

## Examples

The following example shows how to use the <xref:System.IO.Compression.DeflateStream> class to compress and decompress a directory of files.
The following example shows how to use the <xref:System.IO.Compression.DeflateStream> class to compress and decompress a file.

:::code language="csharp" source="~/samples/snippets/csharp/VS_Snippets_CLR/IO.Compression.Deflate1/CS/deflatetest.cs" id="Snippet1":::
:::code language="vb" source="~/samples/snippets/visualbasic/VS_Snippets_CLR/IO.Compression.Deflate1/VB/deflatetest.vb" id="Snippet1":::
:::code language="csharp" source="~/samples/snippets/csharp/System.IO.Compression/Deflate/FileCompressionModeExample.cs" id="Snippet1":::
:::code language="vb" source="~/samples/snippets/visualbasic/System.IO.Compression/Deflate/FileCompressionModeExample.vb" id="Snippet1":::
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net6.0</TargetFramework>
<Nullable>enable</Nullable>
<StartupObject>FileCompressionModeExample</StartupObject>
</PropertyGroup>

</Project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
//<snippet1>
using System;
using System.IO;
using System.IO.Compression;

public static class FileCompressionLevelExample
{
private const string Message = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.";
private const string OriginalFileName = "original.txt";
private const string CompressedFileName = "compressed.dfl";

public static void Main()
{
CreateFileToCompress();
CompressFile();
PrintResults();
DeleteFiles();

/*
Output:
The original file 'original.txt' weighs 445 bytes.
The compressed file 'compressed.dfl' weighs 259 bytes.
*/
}

private static void CreateFileToCompress() => File.WriteAllText(OriginalFileName, Message);

private static void CompressFile()
{
using FileStream originalFileStream = File.Open(OriginalFileName, FileMode.Open);
using FileStream compressedFileStream = File.Create(CompressedFileName);
using var compressor = new DeflateStream(compressedFileStream, CompressionLevel.Fastest);
originalFileStream.CopyTo(compressor);
}

private static void PrintResults()
{
long originalSize = new FileInfo(OriginalFileName).Length;
long compressedSize = new FileInfo(CompressedFileName).Length;

Console.WriteLine($"The original file '{OriginalFileName}' weighs {originalSize} bytes.");
Console.WriteLine($"The compressed file '{CompressedFileName}' weighs {compressedSize} bytes.");
}

private static void DeleteFiles()
{
File.Delete(OriginalFileName);
File.Delete(CompressedFileName);
}
}
//</snippet1>
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
//<snippet1>
using System;
using System.IO;
using System.IO.Compression;

public static class FileCompressionModeExample
{
private const string Message = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.";
private const string OriginalFileName = "original.txt";
private const string CompressedFileName = "compressed.dfl";
private const string DecompressedFileName = "decompressed.txt";

public static void Main()
{
CreateFileToCompress();
CompressFile();
DecompressFile();
PrintResults();
DeleteFiles();

/*
Output:

The original file 'original.txt' weighs 445 bytes. Contents: "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."

The compressed file 'compressed.dfl' weighs 265 bytes.

The decompressed file 'decompressed.txt' weighs 445 bytes. Contents: "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
*/
}

private static void CreateFileToCompress() => File.WriteAllText(OriginalFileName, Message);

private static void CompressFile()
{
using FileStream originalFileStream = File.Open(OriginalFileName, FileMode.Open);
using FileStream compressedFileStream = File.Create(CompressedFileName);
using var compressor = new DeflateStream(compressedFileStream, CompressionMode.Compress);
originalFileStream.CopyTo(compressor);
}

private static void DecompressFile()
{
using FileStream compressedFileStream = File.Open(CompressedFileName, FileMode.Open);
using FileStream outputFileStream = File.Create(DecompressedFileName);
using var decompressor = new DeflateStream(compressedFileStream, CompressionMode.Decompress);
decompressor.CopyTo(outputFileStream);
}

private static void PrintResults()
{
long originalSize = new FileInfo(OriginalFileName).Length;
long compressedSize = new FileInfo(CompressedFileName).Length;
long decompressedSize = new FileInfo(DecompressedFileName).Length;

Console.WriteLine($"The original file '{OriginalFileName}' weighs {originalSize} bytes. Contents: \"{File.ReadAllText(OriginalFileName)}\"");
Console.WriteLine($"The compressed file '{CompressedFileName}' weighs {compressedSize} bytes.");
Console.WriteLine($"The decompressed file '{DecompressedFileName}' weighs {decompressedSize} bytes. Contents: \"{File.ReadAllText(DecompressedFileName)}\"");
}

private static void DeleteFiles()
{
File.Delete(OriginalFileName);
File.Delete(CompressedFileName);
File.Delete(DecompressedFileName);
}
}
//</snippet1>
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
//<snippet1>
using System;
using System.IO;
using System.IO.Compression;
using System.Text;

public static class MemoryWriteReadExample
{
private const string Message = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.";
private static readonly byte[] s_messageBytes = Encoding.ASCII.GetBytes(Message);

public static void Main()
{
Console.WriteLine($"The original string length is {s_messageBytes.Length} bytes.");
using var stream = new MemoryStream();
CompressBytesToStream(stream);
Console.WriteLine($"The compressed stream length is {stream.Length} bytes.");
int decompressedLength = DecompressStreamToBytes(stream);
Console.WriteLine($"The decompressed string length is {decompressedLength} bytes, same as the original length.");
/*
Output:
The original string length is 445 bytes.
The compressed stream length is 265 bytes.
The decompressed string length is 445 bytes, same as the original length.
*/
}

private static void CompressBytesToStream(Stream stream)
{
using var compressor = new DeflateStream(stream, CompressionMode.Compress, leaveOpen: true);
compressor.Write(s_messageBytes, 0, s_messageBytes.Length);
}

private static int DecompressStreamToBytes(Stream stream)
{
stream.Position = 0;
int bufferSize = 512;
byte[] decompressedBytes = new byte[bufferSize];
using var decompressor = new DeflateStream(stream, CompressionMode.Decompress);
int length = decompressor.Read(decompressedBytes, 0, bufferSize);
return length;
}
}
//</snippet1>

This file was deleted.

This file was deleted.

This file was deleted.

Loading