Delete file within a zip file

K

Kevin Beckham

With an existing zip file, how can I delete one of the zipped files ?

I can reference the file with something like
Set oApp = CreateObject("Shell.Application")
With oApp.Namespace(FileNameZip).Items.item(sFileToBeRemoved)

End With

but can't get the verb to use to be able to delete it.

I have tried using the code that accesses zip32.dll and unzip32.dll and,
while it will happily add and extract files from the zip file, it corrupts
the zip file when i try to delete one of its members.

Any help greatly appreciated
TIA
Kevin Beckham
 
P

Patrick Molloy

the syntax is
DeleteFile {filename}


Option Explicit
Sub demo()
Dim sFilename As String
sFilename = "C:\test\somefile.zip"
DeleteFile sFilename
End Sub
 
K

Kevin Beckham

Thanks Patrick, but DeleteFile is part of FileSystemObject - your code would
delete the entire zip file, not a specific file within it

I eventually tracked down what was needed

oApp.Namespace(FileNameZip).items.Item _
(sFileToBeRemoved).InvokeVerb "&Delete"

will come up with the message that you about to permanently delete the file
and do you want to proceed.

The possible verbs are
&Open
Cu&t
&Copy
&Delete
P&roperties
for a file within a zip file (folder). It is probable that the ampersand
could be left out of the verb name.

Kevin
 
R

Ron de Bruin

You can also use this to move it to the Temp folder or other folder

Dim oApp As Object
Set oApp = CreateObject("Shell.Application")

oApp.Namespace(Environ("Temp") & "\").MoveHere _
oApp.Namespace("C:\Users\Ron\Documents\ron.zip").items.Item("TestCodeTables.txt")

After that use Kill to delete the file

--

Regards Ron de Bruin
http://www.rondebruin.nl/tips.htm
 
K

Kevin Beckham

Thanks Ron, but a zip file doesn't behave like a normal folder. When you move
a file from it, the file remains behind - i.e. equivalent to a copy process.

I did encounter other unusual behaviour
'this code failed
Set oFolder = oApp.Namespace(sZipFile)
'this code worked
Set oFolder = oApp.Namespace("" & sZipFile)

irrespective of whether sZipFile is passed ByVal or ByRef

Kevin
 
K

Kevin Beckham

I'm using XP - a series of posts on the subject of MoveHere suggested that
there is a problem with the XP implementation of the Shell object. In
addition, it appears to totally ignore the intOptions parameter.
 
K

Kevin Beckham

Your code works fine until I change FileNameZip from Variant to String, then
it fails
i.e. change
Dim FName, vArr, FileNameZip
to
Dim FName, vArr, FileNameZip As String

Kevin
 
K

Kevin Beckham

Thanks Ron and Dave,
I'll add it to my list of things that "don't make sense but you just have to
know"

Kevin
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top