Deleting a Folder from a Zip file

后端 未结 2 1672
盖世英雄少女心
盖世英雄少女心 2020-12-29 14:05

I am trying to Delete a Folder from the Zip file.

So My file structure is like:

Inside First:

2条回答
  •  星月不相逢
    2020-12-29 14:18

    I was able to delete the folder.

    CreateObject("Shell.Application").Namespace("C:\Users\mohit.bansal\Desktop\Test\test\first.zip\first\second").Self.Verbs.Item(4).DoIt
    

    As GSerb pointed out it may be better to use InvokeVerb)"Delete" to delete the folder.

     CreateObject("Shell.Application").Namespace("C:\Users\mohit.bansal\Desktop\Test\test\first.zip\first\second").Self.InvokeVerb ("Delete")
    

    I have not been able to suppress the file deletion conformation dialog.


    So using .Self.Verbs.Item(4) we can access the Right Click Options starting with 0.

    Demo:

    Addendum

    My final working solution was to copy the contents of the Xip file to a temp folder, delete the sub folder, delete the original zip file, create a new zip file, and copy the remaining items to the new zip file.

    Usage:

      DeleteZipSubDirectory "E:\first.zip","\first\second"   
    
    Sub DeleteZipSubDirectory(ZipFile As Variant, SubFolderRelativePath As Variant)
        Dim tempPath As Variant
    
        'Make Temporary Folder
        tempPath = Environ("Temp") & "\"
        Do While Len(Dir(tempPath, vbDirectory)) > 0
            tempPath = tempPath & "0"
        Loop
        MkDir tempPath
    
        Dim control As Object
        Set control = CreateObject("Shell.Application")
        'Copy Zip Contents to Temporary Folder
        control.Namespace(tempPath).CopyHere control.Namespace(ZipFile).Items
    
        'Debug.Print tempPath
    
        With CreateObject("Scripting.FileSystemObject")
            'Delete Target Folder
            .DeleteFolder tempPath & SubFolderRelativePath
            'Delete Original FIle
            Kill ZipFile
    
            'First we create an empty zip file: https://www.exceltrainingvideos.com/zip-files-using-vba/
            Open ZipFile For Output As #1
            Print #1, Chr$(80) & Chr$(75) & Chr$(5) & Chr$(6) & String(18, 0)
            Close #1
    
            'Copy the Remaining Items into the new Zip File
            control.Namespace(ZipFile).CopyHere control.Namespace(tempPath).Items
            Application.Wait Now + TimeValue("0:00:02")
            'Delete Temporary Folder
            .DeleteFolder tempPath
        End With
    End Sub
    

    Thanks for the Mikku and SiddharthRout for there help.

提交回复
热议问题