ZipFile
The C# ZipFile
class
compresses directories. We call CreateFromDirectory
and ExtractToDirectory
. All files in the directory are compressed to, or expanded to, the directory.
In Visual Studio, you may need to add a reference to your project to use ZipFile
. Go to the Project menu, Add Reference, and then select System.IO.Compression.FileSystem.
This C# example uses the CreateFromDirectory
and ExtractToDirectory
methods. It uses hard-coded relative path names—you can change these to make the program work if needed.
destination.zip
" and a folder "destination."using System.IO.Compression; class Program { static void Main() { // Create a ZIP file from the directory "source". // ... The "source" folder is in the same directory as this program. // ... Use optimal compression. ZipFile.CreateFromDirectory("source", "destination.zip", CompressionLevel.Optimal, false); // Extract the directory we just created. // ... Store the results in a new folder called "destination". // ... The new folder must not exist. ZipFile.ExtractToDirectory("destination.zip", "destination"); } }
Next, we use the ZipArchiveEntry
class
. After calling ZipFile.Open
, we can loop over the entries within the ZIP file by using the Entries property on the ZipArchive
class
.
file.zip
" file. In Windows, create a new compressed folder. Drag a file "test.txt" to the new ZIP file to add it.System.IO.Compression
assembly using Add References in Visual Studio.Path.Combine
, in place of string
concatenation, would be superior.using System; using System.IO.Compression; class Program { static void Main() { // ... Get the ZipArchive from ZipFile.Open. using (ZipArchive archive = ZipFile.Open(@"C:\folder\file.zip", ZipArchiveMode.Read)) { // ... Loop over entries. foreach (ZipArchiveEntry entry in archive.Entries) { // ... Display properties. // Extract to directory. Console.WriteLine("Size: " + entry.CompressedLength); Console.WriteLine("Name: " + entry.Name); entry.ExtractToFile(@"C:\folder\" + entry.Name); } } } }Size: 50 Name: test.txt
CompressionLevel
ZipFile
can be used with the CompressionLevel
enum
. In my tests, passing CompressionLevel.Optimal
usually resulted in better compression ratios.
In .NET we can use Deflate, GZIP, different compression levels, and handle entire directories of folders and files. Custom compression libraries and code become less helpful.