Introduction
While I was developing my Java Class Browser (JCB) I needed a control or sourcecode
(C++) to read jar-files. I searched the web and I didn't find any good freeware to resolve
this problem. What I found was the zlib-compression library of Jean-loup Gailly and Mark
Adler. It was not easy to figure it out how it worked. After a while I found the library
written by Tadeusz Dracz. He uses the zlib-compression in a MFC library. It gave me a good
idea on how to use the zlib-compression library. The problem with his library was that it
was written with MFC, and I want to avoid using MFC because I JCB is a WTL-program. That's
why I started to develop an ATL-control based on the code I found in the sourcecode of
Tadeusz Dracz.
You can use this control with Visual C++ and Visual Basic 6.0. The control has been tested
on Windows 98 and Windows NT. The UNICODE version of the application is not yet tested on
a Windows NT Platform.
Archive Object
Properties
Property |
Type |
R/W |
Description |
Name |
String |
R |
The name of the zipfile. |
Files |
Files Object |
R |
A collection of file-objects. |
Comment |
String |
R/W |
The comment for the zipfile. |
ReadOnly |
Boolean |
R |
True when the zip you opened is read-only. Test on this flag before you want to compress some files. |
Methods
Name |
Returns |
Parameters |
Description |
Close |
/ |
/ |
Closes the zipfile. |
Create |
/ |
ByVal aName as String |
The name of the zipfile to create |
Open |
/ |
ByVal aName as String |
The name of the zipfile to open |
Files Object
Properties
Property |
Type |
R/W |
Description |
Count |
long |
R |
Number of files in the archive. |
Methods
Name |
Returns |
Parameters |
Description |
Add |
/ |
ByVal newVal as File |
Adds a file to the archive. When there's already
a file compressed with the same name it will be override this file. |
AddFileByName |
/ |
ByVal aName as String,
ByVal level as Integer,
ByVal fullPath as Boolean,
ByVal refresh as Boolean |
This method can add files with wildcards. For
level and fullPath see File Object for more information. When refresh is set to true, the
file with the same name in the archive is overwritten. When it is set to false, the file
will be skipped.
The following example does the following: Adding all C++ sources in the current-directory
to the archive. Overwrite the current files in the archive.
zip.Files.AddFileByName "*.cpp", 1, true, true |
Item |
File |
ByVal index as Long |
Returns the file on position index. |
Remove |
/ |
ByVal index as Long |
Removes the file with position index from the
archive. |
File Object
Properties
Property |
Type |
R/W |
Description |
Name |
String |
R/W |
The name of the file. When added with fullPath set to false,
the path will not be stored in the archive. |
Directory |
Boolean |
R |
Returns true when the file is a directory. |
CompressedSize |
Long |
R |
The size of the file when compressed. |
UncompressedSize |
Long |
R |
The size of the file when not compressed. |
Level |
Integer |
R/W |
The level used to perform compression. A value in the range of
0 - 9. 0 is no compression at all. 1 gives best speed, 9 gives best compression. This can
only be set when the file is not yet stored in the archive. |
Crc32 |
Long |
R |
Returns the crc checkum value. |
Comment |
String |
R/W |
Returns or sets the comment. The comment can only be set when
the file is not yet in stored in the archive. |
FullPath |
Boolean |
R/W |
When stored to the archive and FullPath is false the
path-information will be discarded. When the file is extracted and the FullPath is false
the file will be extracted without the path-information. |
Index |
Long |
R |
The index of this file object in the Files collection. This
will be -1 when the file is not yet stored in the archive. |
Methods
Name |
Returns |
Parameters |
Description |
Extract |
/ |
ByVal aPath as String |
Extract the file into the specified path. When
FullPath is set to false, the file will be stored without the path-information. |
Remarks
This control uses the dll-version of the zlib-compression library. When you install
this control the zlib.dll must be reachable. This control makes heavy use of private
interfaces to communicate between the different objects. You can read more about this on
my page of SAWEditListCtrl on how to accomplish this.
Resources
Here is a list of resources I used to develop this control:
The MFC Library of
Tadeusz Dracz.
The zlib-compression home
page.
Updates
27-Dec-2000��� Version 1.0 Released.
8-Mar-2001��� Version 1.1
- Add properties to the fileobject to retrieve the dates of the files
- Extracting to a stringbuffer
18-Apr-2001��� Version 1.2
- Solved a bug in AddFileByName.
23-May-2001��� Version 1.4
- Added a new property for testing on readonly zip-files. Now you can extract from a file from readonly-files.
- Resolved a memory-leak after extracting a file. (Thanks go to Brad Gutilla).
28-Jun-2001��� Version 1.6
- Version 1.6: Bug resolved in the extract-method. When fullpath was true and the directory didn't exist a Can't create file occured. Now the fullpath is created before extracting. (Thanks Nat Dickinson)
30-Aug-2001 Version 2.0
- Version 2.0: Solved the comment-bug on the archive-object. Compatible for Win95-users. (Thanks to Frederic St-Laurent)