Click here to Skip to main content
15,886,199 members
Articles / Desktop Programming / Windows Forms
Article

Listing and Working with Files in Archives

Rate me:
Please Sign up or sign in to vote.
2.86/5 (6 votes)
22 Jun 2007CPOL 32.2K   529   23   2
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

C#
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

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

Compressing Files

C#
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

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

Deleting Files

C#
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

License

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


Written By
Founder
Hong Kong Hong Kong

Comments and Discussions

 
QuestionSome issues with Cake Pin
guardian6536-Oct-07 4:22
guardian6536-Oct-07 4:22 
AnswerRe: Some issues with Cake Pin
Leung Yat Chun7-Oct-07 23:25
Leung Yat Chun7-Oct-07 23:25 
Greetings

The major is because most (at least few of them) library do not support stream.

It is possible to remove the file in the ContentType.GetSteam() function, you will have to uncomment the line 420 (Utils.RemoveFile(tempFile)), and compile again. I comment it out to reduce the load time.

The exception caused by Unicode characters is most likely because some of the dll wrapper (e.g. sqx wrapper) and some of the dll is based on ASCII instead of Unicode, using short archive file name may solve the problem. (e.g. use Utils.GetShortFileName())

Newer build of CAKE can be found on my google group (http://groups.google.com/group/quickzipdev/files), the next version of CAKE will start support wcx plugins.


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.