65.9K
CodeProject is changing. Read more.
Home

Listing and Working with Files in Archives

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.86/5 (6 votes)

Jun 14, 2007

CPOL
viewsIcon

32657

downloadIcon

531

This article describes how to use CAKE3, which is a wrapper component for many archiver DLLs,

Screenshot - Cakcmd.gif

Introduction

This article describes how to use CAKE3, which is a wrapper component for many archiver DLLs, including SharpZipLib(Zip), Sqx Archiver(Sqx), XacRett(Wide range), Unlha(Lha,Lzh), Unarj(Arj), 7-zip32(7z), Unace(ace), Unrar(rar) archives.

Background

There are some zip/unzip solutions for C#, but I need more archive types support. I believe that there will be no native support for most other archives types anytime soon, so the only method is to call Win32 DLLs...

Using the Code

All archive operations can be done via the main unit: Cakdir3, you should create a new instance of Cakdir3 if you wanted to access a new archive.

You should download the archiver DLLs first, detailed path can be found in Dlls.txt.

You can view the help file here.

Listing Files

Cakdir3 c3 = new Cakdir3(archiveName);
c3.OnMessage += new MessageEventHandler(OnMessage);
c3.List(mask);
                                    
foreach (ContentType ct in c3.Archive_Contents)
  Console.WriteLine(ct.fileName);

//Utils.GetSmallFileIcon - Return small file icon of a file (exist or not).
//Utils.GetLargeFileIcon - Return large file icon of a file (exist or not).

Testing Files

Cakdir3 c3 = new Cakdir3(archiveName);
c3.OnMessage += new MessageEventHandler(OnMessage);
c3.Test();

Compressing Files

Cakdir3 c3 = new Cakdir3(archiveName);
c3.OnMessage += new MessageEventHandler(OnMessage);
c3.AddOptions.addFile = new string[] { "C:\file2Add" }
c3.Add(); //Use c3.AddToFolder if you want to add to specific folder in archive.

Decompressing Files

Cakdir3 c3 = new Cakdir3(archiveName);
c3.OnMessage += new MessageEventHandler(OnMessage);
c3.ExtractOptions.extractFolder = "c:\path2extract";
c3.ExtractOptions.extractItem = new string[] { "*" };
c3.Extract();

Deleting Files

Cakdir3 c3 = new Cakdir3(archiveName);
c3.OnMessage += new MessageEventHandler(OnMessage);
c3.DeleteOptions.deleteFile = new string[] { "/file2del" };
c3.Delete();  

Points of Interest

I wrote this component for my next freeware archiver. I don't know what other use can be made of this. Drop me an email if you find one.

History