Zip Component
Overview
The XZip component provides industry-standard Zip archive functionality as an ActiveX DLL, that can be called from script.
- License
- Freeware
- Type
- 32-bit ActiveX DLL
- Version
- 2.5 (final)
- File Name
- XZip.dll
-
Installation Instructions
- Place the dll in a directory like: C:\Program Files\XStandard\Bin\.
- Open or create a shortcut to an administrator command prompt and
cd to the directory where the dll is located.
- Type regsvr32 XZip.dll or on 64-bit Windows type C:\Windows\SysWOW64\regsvr32.exe XZip.dll
- Grant "Read & Execute" file permissions on this dll to Everyone.
-
If you are on 64-bit Windows, you will have to run scripts calling this DLL with the 32-bit version of wscript.exe, like:
C:\Windows\SysWOW64\wscript.exe C:\Users\pudnik\Desktop\zipproject\xziptest.vbs
API Reference: ProgID: XStandard.Zip.1
Sub Pack(sFilePath As String, sArchive As String, [bStorePath As Boolean = False], [sNewPath As String], [lCompressionLevel As Long = -1])
Add file or folder to an archive. Compression level 1 is minimum, level 9 is maximum, all other values default to level 6.
Sub UnPack(sArchive As String, sFolderPath As String, [sPattern As String])
Extract contents of an archive to a folder.
Sub Delete(sFile As String, sArchive As String)
Remove a file from an archive.
Sub Move(sFrom As String, sTo As String, sArchive As String)
Move or rename a file in the archive.
Function Contents(sArchive As String) As Items
Get a list of files and folder in the archive.
Property ErrorCode As Long
(read-only) Return the code of last operation. The following are possible error codes:
Error code |
Description |
200 |
Archive file is not correct. |
201 |
Archive file is not a valid zip file[header]. |
202 |
Archive file is not a valid zip file[dir]. |
203 |
Cannot create archive file. |
204 |
Compressed header is not correct |
205 |
File size is not correct. |
206 |
Cannot Alloc memory |
207 |
Cannot open archive file |
208 |
Archive file is empty |
209 |
Cannot alloc memeory. |
210 |
Cannot find source file. |
211 |
Cannot open file |
212 |
Cannot alloc memory. |
213 |
Cannot alloc memory. |
214 |
There is no file. |
215 |
Archive file is same as the input file. |
216 |
Cannot Alloc memory. |
217 |
Incorrect signature of header |
230 |
Cannot open archive file. |
240 |
Archive file is not correct. |
241 |
Archive file is not a valid zip file[header]. |
242 |
Archive file is not a valid zip file[dir]. |
250 |
Cannot open archive file. |
251 |
Archive file is not correct. |
252 |
Cannot create file for swapping. |
253 |
Header of archive file is incorrect. |
254 |
Unknown error when modifying archive file. |
290 |
Cannot get information from archive file. |
291 |
Cannot get information from archive file. |
591 |
Cannot get information from archive file. |
Property ErrorDescription As String
(read-only) Return the error code description of last operation.
Property Version As String
(read-only) Product version.
API Reference: Class: Items
Property Count As Long
(read-only) Returns the number of members in a collection.
Property Item(Index As Long) As Item
(read-only) Returns a specific member of a collection by position.
API Reference: Class: Item
Property Date As Date
(read-only) Last modified date.
Property Name As String
(read-only) File name.
Property Path As String
(read-only) Relative path.
Property Size As Long
(read-only) File size in bytes.
Property Type As ItemType
(read-only) Type of object.
API Reference: Enum: ItemType
Const tFolder = 1
Item is a folder.
Const tFile = 2
Item is a file.
Examples
The examples below are for Active Server Pages. For Windows Scripting Host or Visual Basic, replace Server.CreateObject with CreateObject and replace Resonse.Write with MsgBox .
How to archive (or zip) multiple files
<%
Dim objZip
Set objZip = Server.CreateObject("XStandard.Zip")
objZip.Pack "C:\Temp\golf.jpg", "C:\Temp\images.zip"
objZip.Pack "C:\Temp\racing.gif", "C:\Temp\images.zip"
Set objZip = Nothing
%>
How to archive (or zip) multiple files with different compression levels
<%
Dim objZip
Set objZip = Server.CreateObject("XStandard.Zip")
objZip.Pack "C:\Temp\reports.doc", "C:\Temp\archive.zip", , , 9
objZip.Pack "C:\Temp\boat.jpg", "C:\Temp\archive.zip", , , 1
Set objZip = Nothing
%>
How to archive (or zip) multiple files with default path
<%
Dim objZip
Set objZip = Server.CreateObject("XStandard.Zip")
objZip.Pack "C:\Temp\reports.doc", "C:\Temp\archive.zip", True
objZip.Pack "C:\Temp\boat.jpg", "C:\Temp\archive.zip", True
Set objZip = Nothing
%>
How to archive (or zip) multiple files with a custom path
<%
Dim objZip
Set objZip = Server.CreateObject("XStandard.Zip")
objZip.Pack "C:\Temp\reports.doc", "C:\Temp\archive.zip", True, "files/word"
objZip.Pack "C:\Temp\boat.jpg", "C:\Temp\archive.zip", True, "files/images"
Set objZip = Nothing
%>
How to archive (or zip) multiple files using wildcards
<%
Dim objZip
Set objZip = Server.CreateObject("XStandard.Zip")
objZip.Pack "C:\Temp\*.jpg", "C:\Temp\images.zip"
Set objZip = Nothing
%>
How to unzip files
<%
Dim objZip
Set objZip = Server.CreateObject("XStandard.Zip")
objZip.UnPack "C:\Temp\images.zip", "C:\Temp\"
Set objZip = Nothing
%>
How to unzip files using wildcards
<%
Dim objZip
Set objZip = Server.CreateObject("XStandard.Zip")
objZip.UnPack "C:\Temp\images.zip", "C:\Temp\", "*.jpg"
Set objZip = Nothing
%>
How to get a listing of files and folder in an archive
<%
Dim objZip, objItem
Set objZip = Server.CreateObject("XStandard.Zip")
For Each objItem In objZip.Contents("C:\Temp\images.zip")
Response.Write objItem.Path & objItem.Name & "<br />"
Next
Set objZip = Nothing
Set objItem = Nothing
%>
How to remove a file from an archive
<%
Dim objZip
Set objZip = Server.CreateObject("XStandard.Zip")
objZip.Delete "headshots/smith.jpg", "C:\Temp\images.zip"
Set objZip = Nothing
%>
How to move a file in an archive
<%
Dim objZip
Set objZip = Server.CreateObject("XStandard.Zip")
objZip.Move "headshots/jones.jpg", "staff/jones.jpg", "C:\Temp\images.zip"
Set objZip = Nothing
%>
How to rename a file in an archive
<%
Dim objZip
Set objZip = Server.CreateObject("XStandard.Zip")
objZip.Move "headshots/jones.jpg", "headshots/randy-jones.jpg", "C:\Temp\images.zip"
Set objZip = Nothing
%>
Code Examples
ZIP files with X-ZIP VBScript Code: Zip "C:\boot.ini", "C:\testzip.zip" Function Zip( myFileSpec, myZip ) ' This function uses X-standards.com's X-zip component to add ' files to a ZIP file. ' If the ZIP file doesn't exist, it will be created on-the-fly. ' Compression level is set to maximum, only relative paths are ' stored. ' ' Arguments: ' myFileSpec [string] the file(s) to be added, wildcards allowed ' (*.* will include subdirectories, thus ' making the function recursive) ' myZip [string] the fully qualified path to the ZIP file ' ' Written by Rob van der Woude ' http://www.robvanderwoude.com ' ' The X-zip component is available at: ' http://www.xstandard.com/en/documentation/xzip/ ' For more information on available functionality read: ' http://www.xstandard.com/printer-friendly.asp?id=C9891D8A-5390-44ED-BC60-2267ED6763A7 Dim objZIP On Error Resume Next Err.Clear Set objZIP = CreateObject( "XStandard.Zip" ) objZIP.Pack myFileSpec, myZip, , , 9 Zip = Err.Number Err.Clear Set objZIP = Nothing On Error Goto 0 End Function
Requirements: Windows version: any Network: any Client software: X-ZIP component Script Engine: any Summarized: Works in any Windows version with the X-ZIP component installed.
ZIP folders with System.Shell Folder's CopyHere method VBScript Code: Option Explicit
Dim arrResult
arrResult = ZipFolder( "C:\Documents and Settings\MyUserID\Application Data", "C:\MyUserID.zip" ) If arrResult(0) = 0 Then If arrResult(1) = 1 Then WScript.Echo "Done; 1 empty subfolder was skipped." Else WScript.Echo "Done; " & arrResult(1) & " empty subfolders were skipped." End If Else WScript.Echo "ERROR " & Join( arrResult, vbCrLf ) End If
Function ZipFolder( myFolder, myZipFile ) ' This function recursively ZIPs an entire folder into a single ZIP file, ' using only Windows' built-in ("native") objects and methods. ' ' Last Modified: ' October 12, 2008 ' ' Arguments: ' myFolder [string] the fully qualified path of the folder to be ZIPped ' myZipFile [string] the fully qualified path of the target ZIP file ' ' Return Code: ' An array with the error number at index 0, the source at index 1, and ' the description at index 2. If the error number equals 0, all went well ' and at index 1 the number of skipped empty subfolders can be found. ' ' Notes: ' [1] If the specified ZIP file exists, it will be overwritten ' (NOT APPENDED) without notice! ' [2] Empty subfolders in the specified source folder will be skipped ' without notice; lower level subfolders WILL be added, whether ' empty or not. ' [3] There seems to be an undocumented limit to the number of files ' that can be added, possibly due to timeouts; limits may vary from ' 200 to 700 files; better stay well below 200 files just to be safe. ' [4] ZIP files can NEVER exceed 2 GB! This is a limitation in the ZIP ' format itself. ' ' Based on a VBA script (http://www.rondebruin.nl/win/s7/win001.htm) ' by Ron de Bruin, http://www.rondebruin.nl ' ' (Re)written by Rob van der Woude ' http://www.robvanderwoude.com
' Standard housekeeping Dim intSkipped, intSrcItems Dim objApp, objFolder, objFSO, objItem, objTxt Dim strSkipped
Const ForWriting = 2
intSkipped = 0
' Make sure the path ends with a backslash If Right( myFolder, 1 ) <> "\" Then myFolder = myFolder & "\" End If
' Use custom error handling On Error Resume Next
' Create an empty ZIP file Set objFSO = CreateObject( "Scripting.FileSystemObject" ) Set objTxt = objFSO.OpenTextFile( myZipFile, ForWriting, True ) objTxt.Write "PK" & Chr(5) & Chr(6) & String( 18, Chr(0) ) objTxt.Close Set objTxt = Nothing
' Abort on errors If Err Then ZipFolder = Array( Err.Number, Err.Source, Err.Description ) Err.Clear On Error Goto 0 Exit Function End If
' Create a Shell object Set objApp = CreateObject( "Shell.Application" )
' Copy the files to the compressed folder For Each objItem in objApp.NameSpace( myFolder ).Items If objItem.IsFolder Then ' Check if the subfolder is empty, and if ' so, skip it to prevent an error message Set objFolder = objFSO.GetFolder( objItem.Path ) If objFolder.Files.Count + objFolder.SubFolders.Count = 0 Then intSkipped = intSkipped + 1 Else objApp.NameSpace( myZipFile ).CopyHere objItem End If Else objApp.NameSpace( myZipFile ).CopyHere objItem End If Next
Set objFolder = Nothing Set objFSO = Nothing
' Abort on errors If Err Then ZipFolder = Array( Err.Number, Err.Source, Err.Description ) Set objApp = Nothing Err.Clear On Error Goto 0 Exit Function End If
' Keep script waiting until compression is done intSrcItems = objApp.NameSpace( myFolder ).Items.Count Do Until objApp.NameSpace( myZipFile ).Items.Count + intSkipped = intSrcItems WScript.Sleep 200 Loop Set objApp = Nothing
' Abort on errors If Err Then ZipFolder = Array( Err.Number, Err.Source, Err.Description ) Err.Clear On Error Goto 0 Exit Function End If
' Restore default error handling On Error Goto 0
' Return message if empty subfolders were skipped If intSkipped = 0 Then strSkipped = "" Else strSkipped = "skipped empty subfolders" End If
' Return code 0 (no error occurred) ZipFolder = Array( 0, intSkipped, strSkipped ) End Function
Requirements: Windows version: Windows 2000, XP, Server 2003 & Vista Network: any Client software: N/A Script Engine: any Summarized: Should work in Windows 2000 and later. Will not work in Windows 95, 98, ME or NT.
UNZIP with X-ZIP VBScript Code: UnZip "C:\testzip.zip", "D:\", "*.ini"
Function UnZip( myZip, myTargetDir, myFileSpec ) ' This function uses X-standards.com's X-zip component to extract files from a ZIP file. ' ' Arguments: ' myZip [string] the fully qualified path to the ZIP file ' myTargetDir [string] the directory where the extracted files will be located ' myFileSpec [string] the file(s) to be extracted, wildcards allowed ' ' Written by Rob van der Woude ' http://www.robvanderwoude.com ' ' The X-zip component is available at: ' http://www.xstandard.com/en/documentation/xzip/ ' For more information on available functionality read: ' http://www.xstandard.com/printer-friendly.asp?id=C9891D8A-5390-44ED-BC60-2267ED6763A7 Dim objZIP On Error Resume Next Err.Clear Set objZIP = CreateObject( "XStandard.Zip" ) objZIP.UnPack myZip, myTargetDir, myFileSpec UnZip = Err.Number Err.Clear Set objZIP = Nothing On Error Goto 0 End Function
Requirements: Windows version: any Network: any Client software: X-ZIP component Script Engine: any Summarized: Works in any Windows version with the X-ZIP component installed.
UNZIP with System.Shell Folder's CopyHere method
(can also be used to extract CAB files and other archives, or to copy folders while displaying a progress bar) VBScript Code: Option Explicit
' UnZip "C:\test.zip" into the folder "C:\test1" Extract "C:\test.zip", "C:\test1"
' Extract "C:\test.cab" into the folder "C:\test2" Extract "C:\test.cab", "C:\test2"
' Copy the contents of folder "C:\test2" to the folder "C:\test3" Extract "C:\test2", "C:\test3"
Sub Extract( ByVal myZipFile, ByVal myTargetDir ) ' Function to extract all files from a compressed "folder" ' (ZIP, CAB, etc.) using the Shell Folders' CopyHere method ' (http://msdn2.microsoft.com/en-us/library/ms723207.aspx). ' All files and folders will be extracted from the ZIP file. ' A progress bar will be displayed, and the user will be ' prompted to confirm file overwrites if necessary. ' ' Note: ' This function can also be used to copy "normal" folders, ' if a progress bar and confirmation dialog(s) are required: ' just use a folder path for the "myZipFile" argument. ' ' Arguments: ' myZipFile [string] the fully qualified path of the ZIP file ' myTargetDir [string] the fully qualified path of the (existing) destination folder ' ' Based on an article by Gerald Gibson Jr.: ' http://www.codeproject.com/csharp/decompresswinshellapics.asp ' ' Written by Rob van der Woude ' http://www.robvanderwoude.com
Dim intOptions, objShell, objSource, objTarget
' Create the required Shell objects Set objShell = CreateObject( "Shell.Application" )
' Create a reference to the files and folders in the ZIP file Set objSource = objShell.NameSpace( myZipFile ).Items( )
' Create a reference to the target folder Set objTarget = objShell.NameSpace( myTargetDir )
' These are the available CopyHere options, according to MSDN ' (http://msdn2.microsoft.com/en-us/library/ms723207.aspx). ' On my test systems, however, the options were completely ignored. ' 4: Do not display a progress dialog box. ' 8: Give the file a new name in a move, copy, or rename ' operation if a file with the target name already exists. ' 16: Click "Yes to All" in any dialog box that is displayed. ' 64: Preserve undo information, if possible. ' 128: Perform the operation on files only if a wildcard file ' name (*.*) is specified. ' 256: Display a progress dialog box but do not show the file ' names. ' 512: Do not confirm the creation of a new directory if the ' operation requires one to be created. ' 1024: Do not display a user interface if an error occurs. ' 4096: Only operate in the local directory. ' Don't operate recursively into subdirectories. ' 8192: Do not copy connected files as a group. ' Only copy the specified files. intOptions = 256
' UnZIP the files objTarget.CopyHere objSource, intOptions
' Release the objects Set objSource = Nothing Set objTarget = Nothing Set objShell = Nothing End Sub
Requirements: Windows version: Windows 2000, XP, Server 2003 & Vista Network: any Client software: N/A Script Engine: any Summarized: Should work in Windows 2000 and later. Will not work in Windows 95, 98, ME or NT.
Save File As dialog (SAFRCFileDlg.FileSave)
Known Issues
- The
UnPack() method will first remove all files from the destination folder. This behavior will change in future releases.
- This component was not designed to work with huge archives. Max archive size depends on the amount of available RAM.
- This component is designed for 32-bit operating systems and will not work natively on 64-bit operating systems.
|