Working With Zip Files
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();