Is there a built-in zip library in .NET 3.5?
If not, what are the popular open source .net zip libraries.
EDIT: See note in comments - SharpZipLib is now unmaintained, and you probably want to avoid it.
Open source: #ZipLib
I believe that the classes in the System.IO.Compression namespace are fine for compressing/decompressing a single stream of data, but there's nothing built into the framework to cope with actual zip files.
EDIT: As noted in Ants' answer, there's System.IO.Packaging.ZipPackage but it certainly looks like that's really designed for use in WPF, and wouldn't be terribly convenient to use for general zip file handling. Worth looking into though. I wasn't aware of it before though... definitely worth investigating.
ZipPackage would be inconvenient. All you need is a library which allows adding files to a zip and retrieving from a zip. How complex could you possibly need it? Also can you elaborate on why it looks like it's for WPF?ZipPackage is complex, compared with that set of requirements - relationships, parts etc. It's part of a bigger packaging framework. As for the relationship to WPF - that was mostly on the basis of what else is in WindowsBase.dll, most of which seems to be WPF-related.There is no built-in library. There are open-source options.
DotNetZip is one. Simple, easy to use. It has good features: AES Encryption, regular encryption, streams, ZIP64, file comments, Unicode, progress events, more. And it's free and open source.
Here's some sample code.
// extract all Photoshop files larger than 100mb using (ZipFile zip1 = ZipFile.Read(ZipFileName)) { var LargePhotoShopFiles = zip1.SelectEntries("name = *.psd and size > 100mb"); foreach (ZipEntry e in LargePhotoShopFiles) { if (e.UsesEncryption) e.ExtractWithPassword("unpackDirectory", "VerySecret!"); else e.Extract("unpackDirectory"); } } Check out System.IO.Packaging.ZipPackage class.
7Zip will help and its available in multiple languages
Try System.IO.Compression.DeflateStream.
I will be second to recommend http://www.7-zip.org/sdk.html LZMA SDK, but it's not ZIP.
You can extract a zip using this:
public static void UnZip(string zipFile, string folderPath) { if (!File.Exists(zipFile)) throw new FileNotFoundException(); if (!Directory.Exists(folderPath)) Directory.CreateDirectory(folderPath); var t = Type.GetTypeFromProgID("Shell.Application"); dynamic shellApplication = Activator.CreateInstance(t); dynamic destinationFolder = shellApplication.NameSpace(folderPath); dynamic sourceFile = shellApplication.NameSpace(zipFile); foreach (var file in sourceFile.Items()) { destinationFolder.CopyHere(file, 4 | 16); } }