Friday, July 31, 2009

.NET wrapper for Info-ZIP

The challenge

Many of today's applications require the capability of extracting certain files from a ZIP archive, either onto the hard disk or into memory. A lot of useful zip libraries for .NET applications abound on the Web (SharpZipLib for .NET Framework is a very known one), but I wanted to use the Info-ZIP library as it was always my favorite library for C++ projects.

Info-ZIP is an Open Source version of Phil Katz's "deflate" and "inflate" routines used in his popular file compression program, PKZIP. Info-ZIP code has been incorporated into a number of third-party products as well, both commercial and freeware. It offers two dynamic link libraries: one for zipping, and one for unzipping.

The Info-ZIP DLLs are free to use and distribute, but they are designed to be used in C/C++ projects, so they're not really .NET-friendly. Also, the Info-ZIP package contains almost no documentation showing how to use the Info-ZIP DLLs.

Therefore, I decided to write a small C# wrapper that provides all the required data types and functions in order to give the possibility to work with the Info-ZIP API.

The solution

I built the Info-ZIP .NET wrapper as a C# library named Karna Compression where all the Info-ZIP native types and methods are hidden behind the simple .NET facade. Karna Compression library has two main classes: KarnaZip and KarnaUnzip.

KarnaZip is a class for dealing with zip archives that can add, freshen, or move files in an archive.

KarnaZip.png

KarnaUnzip can be used to extract files from a ZIP archive to the hard drive or memory.

KarnaUnzip.png

Using the code

Creation of zip archive, including password protection and comments, requires just a few lines of code:


See full detail: http://www.codeproject.com/KB/files/infozipdotnet.aspx

1 comment:

Dominic Finckh said...

Great post which you provide over here really enjoying this. Keep sharing