Delete file within a zip file

  • Thread starter Thread starter Kevin Beckham
  • Start date Start date
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
 
the syntax is
DeleteFile {filename}


Option Explicit
Sub demo()
Dim sFilename As String
sFilename = "C:\test\somefile.zip"
DeleteFile sFilename
End Sub
 
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
 
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
 
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
 
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.
 
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
 
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
 
Back
Top