Click here to Skip to main content
15,868,306 members
Articles / Desktop Programming / Win32

.NET wrapper for Info-ZIP

Rate me:
Please Sign up or sign in to vote.
3.67/5 (3 votes)
25 May 2009CPOL2 min read 44.4K   505   26   10
A C# wrapper for the Info-ZIP library.

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:

C#
string[] content = { "*.txt" };
KarnaZip zip = new KarnaZip();
zip.FileName = "myziparchive.zip";
zip.Password = "password"; //optional
zip.Comment = "This is my documents archive";
zip.AddFiles(content);

Other operations with a zip archive can be performed in a similar way:

C#
//Update files
zip.UpdateFiles(content);

//Move files to the archive
zip.MoveFiles(content);

//Delete files from the archive
zip.DeleteFiles(content);

Extracting files from the archive using the KarnaUnzip class is even more simple:

C#
KarnaUnzip unzip = new KarnaUnzip("myziparchive.zip");
unzip.Password = "password"; //optional
unzip.ExtractArchive(); 

The following code snippet shows how to extract a file from the archive to memory without saving the file to the hard drive:

C#
byte[] rawBytes;
KarnaUnzip unzip = new KarnaUnzip("myziparchive.zip");
rawBytes = unzip.ExtractToMemory("readme.txt");

Additional information

Karna Compression is a small part of the Open Source Karna .NET library which can be downloaded from the SourceForge website: http://www.sourceforge.net/projects/karna.

More information about the Info-ZIP project can be found on Info-ZIP's home site: www.info-zip.org.

History

  • 25.05.2009: Initial release.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Architect
Belgium Belgium
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
QuestionRequire c++ wrapper Pin
Aniruddha Loya17-Sep-11 2:06
Aniruddha Loya17-Sep-11 2:06 
Generalinterop Pin
Donsw10-Jul-09 10:52
Donsw10-Jul-09 10:52 
Why not just use an interop to the dll instead? it is used under the covers anyway. Was this to make it object oriented? Smile | :)

cheers,
Donsw
My Recent Article : Backup of Data files - Full and Incremental

GeneralRe: interop Pin
Serhiy Perevoznyk8-Sep-09 4:11
Serhiy Perevoznyk8-Sep-09 4:11 
GeneralDotNetZip Pin
Huisheng Chen25-May-09 15:47
Huisheng Chen25-May-09 15:47 
GeneralRe: DotNetZip Pin
Serhiy Perevoznyk25-May-09 21:05
Serhiy Perevoznyk25-May-09 21:05 
GeneralRe: DotNetZip Pin
Huisheng Chen26-May-09 0:09
Huisheng Chen26-May-09 0:09 
GeneralRe: DotNetZip Pin
Serhiy Perevoznyk26-May-09 0:28
Serhiy Perevoznyk26-May-09 0:28 
GeneralRe: DotNetZip Pin
Huisheng Chen26-May-09 2:22
Huisheng Chen26-May-09 2:22 
GeneralRe: DotNetZip Pin
stano2-Jun-09 6:03
stano2-Jun-09 6:03 
GeneralRe: DotNetZip Pin
Huisheng Chen2-Jun-09 15:42
Huisheng Chen2-Jun-09 15:42 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.