Read Zip Files
List All Files Contained in the Zip File
using var zipFile = ZipFile.OpenRead("multi-folder.zip");
var counter = 0;
foreach (var entry in zipFile.Entries)
Console.WriteLine($"{++counter,3}: {entry.Name}");
Extract Files From Zip File With ExtractToDirectory() Method
ZipFile.ExtractToDirectory("multi-folder.zip", "extracted-files", true);
Extract Files From Zip File With ExtractToFile() Method
using var zipFile = ZipFile.OpenRead("multi-folder.zip");
var rootFolder = "extracted-files";
foreach (var entry in zipFile.Entries)
{
var wholePath = Path.Combine(
rootFolder,
Path.GetDirectoryName(entry.FullName) ?? string.Empty);
if (!Directory.Exists(wholePath))
Directory.CreateDirectory(wholePath);
if (!string.IsNullOrEmpty(entry.Name))
{
var wholeFileName = Path.Combine(
wholePath,
Path.GetFileName(entry.FullName));
entry.ExtractToFile(wholeFileName, true);
}
}
Extract Files With Open() Method
using var zipFile = ZipFile.OpenRead("multi-folder.zip");
foreach (var entry in zipFile.Entries)
{
if (!string.IsNullOrEmpty(entry.Name))
{
using (var stream = entry.Open())
using (var memoryStream = new MemoryStream())
{
stream.CopyTo(memoryStream);
var bytes = memoryStream.ToArray();
var base64 = Convert.ToBase64String(bytes);
Console.WriteLine($"{entry.FullName} => {base64}");
}
}
}
Create Zip Files
Compress (Zipping) Whole Folder
ZipFile.CreateFromDirectory(@"c:\temp", "temp.zip");
Add Files to a Zip File
var folder = new DirectoryInfo(".");
FileInfo[] files = folder.GetFiles("*.txt", SearchOption.AllDirectories);
using var archive = ZipFile.Open(@"..\parent.zip", ZipArchiveMode.Create);
foreach (var file in files)
{
archive.CreateEntryFromFile(
file.FullName,
Path.GetRelativePath(folder.FullName, file.FullName)
);
}
Create a Zip File With Stream
var helloText = "Hello world!";
using var archive = ZipFile.Open(@"..\test.zip", ZipArchiveMode.Create);
var entry = archive.CreateEntry("hello.txt");
using (Stream st = entry.Open())
using (StreamWriter writerManifest = new StreamWriter(st))
writerManifest.WriteLine(helloText);
Compression Level
var entry = archive.CreateEntry("hello.txt", CompressionLevel.SmallestSize);
Delete Entries From Zip Files
using var zipFile = ZipFile.Open("multi-folder.zip", ZipArchiveMode.Update);
var images = zipFile.Entries.Where(e => e.Name == "image.png").ToList();
for (int i = images.Count - 1; i >= 0; --i)
images[i].Delete();