开发者

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 Co开发者_Python百科pyHere 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


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. ;)


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 


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


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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜