Sample code for 30+ languages & platforms
SQL Server

Remove an Entry from an Existing ZIP Using DeleteEntry

See more Zip Examples

This example demonstrates how to use the DeleteEntry method to remove a file from an existing ZIP archive.

The example:

  • Creates a ZIP archive containing three text files
  • Opens the ZIP archive for modification
  • Finds and deletes one entry
  • Writes the modified ZIP archive to a new filename

Suppose the original ZIP archive contains:

a.txt
b.txt
c.txt

After deleting b.txt, the modified ZIP archive contains:

a.txt
c.txt

The entry is removed only from the in-memory ZIP object until a Write* method is called.

Chilkat SQL Server Downloads

SQL Server
-- Important: See this note about string length limitations for strings returned by sp_OAMethod calls.
--
CREATE PROCEDURE ChilkatSample
AS
BEGIN
    DECLARE @hr int
    -- Important: Do not use nvarchar(max).  See the warning about using nvarchar(max).
    DECLARE @sTmp0 nvarchar(4000)
    DECLARE @success int
    SELECT @success = 0

    SELECT @success = 0

    -- ------------------------------------------------------------
    -- First create a ZIP archive containing three text files.

    DECLARE @zip int
    EXEC @hr = sp_OACreate 'Chilkat.Zip', @zip OUT
    IF @hr <> 0
    BEGIN
        PRINT 'Failed to create ActiveX component'
        RETURN
    END

    EXEC sp_OAMethod @zip, 'NewZip', @success OUT, 'original.zip'
    IF @success = 0
      BEGIN
        EXEC sp_OAGetProperty @zip, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @zip
        RETURN
      END

    DECLARE @charset nvarchar(4000)
    SELECT @charset = 'utf-8'

    EXEC sp_OAMethod @zip, 'AddString', @success OUT, 'a.txt', 'Contents of file A', @charset
    IF @success = 0
      BEGIN
        EXEC sp_OAGetProperty @zip, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @zip
        RETURN
      END

    EXEC sp_OAMethod @zip, 'AddString', @success OUT, 'b.txt', 'Contents of file B', @charset
    IF @success = 0
      BEGIN
        EXEC sp_OAGetProperty @zip, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @zip
        RETURN
      END

    EXEC sp_OAMethod @zip, 'AddString', @success OUT, 'c.txt', 'Contents of file C', @charset
    IF @success = 0
      BEGIN
        EXEC sp_OAGetProperty @zip, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @zip
        RETURN
      END

    -- Write the ZIP archive to disk.
    -- 
    -- The ZIP now contains:
    -- 
    --     a.txt
    --     b.txt
    --     c.txt
    -- 
    EXEC sp_OAMethod @zip, 'WriteZipAndClose', @success OUT
    IF @success = 0
      BEGIN
        EXEC sp_OAGetProperty @zip, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @zip
        RETURN
      END

    -- ------------------------------------------------------------
    -- Open the existing ZIP archive for modification.

    DECLARE @zip2 int
    EXEC @hr = sp_OACreate 'Chilkat.Zip', @zip2 OUT

    EXEC sp_OAMethod @zip2, 'OpenZip', @success OUT, 'original.zip'
    IF @success = 0
      BEGIN
        EXEC sp_OAGetProperty @zip2, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @zip
        EXEC @hr = sp_OADestroy @zip2
        RETURN
      END

    -- Find the entry named "b.txt".
    DECLARE @entry int
    EXEC @hr = sp_OACreate 'Chilkat.ZipEntry', @entry OUT

    EXEC sp_OAMethod @zip2, 'EntryOf', @success OUT, 'b.txt', @entry
    IF @success = 0
      BEGIN
        EXEC sp_OAGetProperty @zip2, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @zip
        EXEC @hr = sp_OADestroy @zip2
        EXEC @hr = sp_OADestroy @entry
        RETURN
      END

    -- Remove the entry from the in-memory ZIP object.
    -- 
    -- At this point, the original ZIP file on disk is unchanged.
    -- The deletion takes effect only after WriteZip or
    -- WriteZipAndClose is called.
    EXEC sp_OAMethod @zip2, 'DeleteEntry', @success OUT, @entry
    IF @success = 0
      BEGIN
        EXEC sp_OAGetProperty @zip2, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @zip
        EXEC @hr = sp_OADestroy @zip2
        EXEC @hr = sp_OADestroy @entry
        RETURN
      END

    -- Write the modified ZIP archive to a new file.
    EXEC sp_OASetProperty @zip2, 'FileName', 'modified.zip'

    EXEC sp_OAMethod @zip2, 'WriteZipAndClose', @success OUT
    IF @success = 0
      BEGIN
        EXEC sp_OAGetProperty @zip2, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @zip
        EXEC @hr = sp_OADestroy @zip2
        EXEC @hr = sp_OADestroy @entry
        RETURN
      END

    -- The modified ZIP now contains:
    -- 
    --     a.txt
    --     c.txt
    -- 


    PRINT 'ZIP archive updated successfully.'

    EXEC @hr = sp_OADestroy @zip
    EXEC @hr = sp_OADestroy @zip2
    EXEC @hr = sp_OADestroy @entry


END
GO