ccwhite
ccwhite

Reputation: 125

How to read the contents of a .zip file with VBScript without actually extracting the files?

I have a .zip file that starts with a parent directory. I need to read that dir from the file then search my HD to see if that dir name already exists. If it exists, I then delete it and replace it the contents of the .zip file.

All of this I can do, except read the .zip without actually unzipping the file.

The .zip file can be upwards of 2G in size so I want to avoid unzipping, then reading the dir, then copying.

The reason I don't just unzip directly to the location and force an overwrite is that for some reason when using the CopyHere method to unzip, it ignores the switches that would normally force the overwrite and still prompts the user if they want to overwrite.

Code to unzip files:

 Set objSA = CreateObject("Shell.Application")
 Set objSource = objSA.NameSpace(pathToZipFile).Items ()
 Set objTarget = objSA.NameSpace(extractTo)     

 objTarget.CopyHere objSource,4

Upvotes: 8

Views: 8569

Answers (4)

Stephen Quan
Stephen Quan

Reputation: 26309

You can use For Each on your objSource object, for example:

Dim objSA, objSource, item
Set objSA = CreateObject("Shell.Application")
Set objSource = objSA.NameSpace(pathToZipFile).Items ()
For Each item in objSource
    WScript.Echo item
Next 

Upvotes: 2

Doug Chamberlain
Doug Chamberlain

Reputation: 11351

Here is a similar question on SO.
How to list the contents of a .zip folder in c#?

I've used this library myself. It works well, http://dotnetzip.codeplex.com/, there is even a treeview example that appears to read the zip without extraction.

You will need the DLLs on the server, but I wouldn't say you have to install them. ;)

Upvotes: 1

Hans Olsson
Hans Olsson

Reputation: 55059

Assuming that you can use an external application, try downloading 7Zip and then have your script execute it with the -l switch. This should give you some output that you should be able to parse in some way.

Sample from the help file: 7z l archive.zip

Upvotes: 0

David Turvey
David Turvey

Reputation: 2941

I'm not sure if it is possible to read the contents of a zip without extracting it.

If you are just trying to avoid a time consuming copy operation on the data you could try unzipping to a temp directory and then using a "move" function. Move is usually less time consuming than copy as it doesn't actually re-write the data on the disk. It just updates the file system to point at where the data is.

Upvotes: 0

Related Questions