Sample code for 30+ languages & platforms
SQL Server

Append Files to an Existing ZIP Archive Using QuickAppend

See more Zip Examples

Demonstrates how to use the QuickAppend method to append additional files to an existing ZIP archive.

Unlike methods that rewrite the entire ZIP archive, QuickAppend modifies the existing ZIP in-place by appending new entries directly to the end of the archive.

Existing ZIP entries are not recompressed or rewritten, making QuickAppend the fastest and most efficient way to add files to a large pre-existing ZIP archive.

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

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

    -- ------------------------------------------------------------
    -- Initialize a new Zip object.
    -- 
    -- NewZip resets the Zip object to a new and empty state.
    -- It does NOT immediately create or write a .zip file.
    -- 
    -- The filename passed to NewZip is not used by QuickAppend,
    -- but NewZip is still useful because it initializes the
    -- Zip object to an empty state.
    EXEC sp_OAMethod @zip, 'NewZip', @success OUT, 'notUsed.zip'
    IF @success = 0
      BEGIN
        EXEC sp_OAGetProperty @zip, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @zip
        RETURN
      END

    -- ------------------------------------------------------------
    -- Add a reference to a local filesystem file.
    -- 
    -- AddFile does NOT immediately read or compress the file.
    -- Instead, it adds a reference to the file that will later
    -- be processed when QuickAppend is called.
    -- 
    -- The file being referenced is:
    -- 
    --     c:/temp/files/something.dat
    -- 
    DECLARE @saveExtraPath int
    SELECT @saveExtraPath = 0

    EXEC sp_OAMethod @zip, 'AddFile', @success OUT, 'c:/temp/files/something.dat', @saveExtraPath

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

    -- Because saveExtraPath = 0,
    -- the file will be stored in the ZIP as:
    -- 
    --     something.dat
    -- 

    -- ------------------------------------------------------------
    -- Append the referenced files to an existing ZIP archive.
    -- 
    -- QuickAppend opens the existing ZIP archive:
    -- 
    --     c:/temp/zips/preExisting.zip
    -- 
    -- The referenced files are then:
    -- 
    --   * Read from the local filesystem
    --   * Compressed as needed
    --   * Appended to the existing ZIP archive
    -- 
    EXEC sp_OAMethod @zip, 'QuickAppend', @success OUT, 'c:/temp/zips/preExisting.zip'
    IF @success = 0
      BEGIN
        EXEC sp_OAGetProperty @zip, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @zip
        RETURN
      END


    PRINT 'Files appended successfully.'

    PRINT ''

    -- ------------------------------------------------------------
    -- Additional files, directory trees, or in-memory data
    -- can be added before calling QuickAppend.
    -- 
    -- For example:
    -- 
    --     AddFile
    --     AppendFiles
    --     AppendFilesEx
    --     AddString
    --     AddBd
    --     AddSb
    -- 
    -- Whatever entries are currently referenced by the Zip object
    -- are appended to the existing ZIP archive when QuickAppend
    -- is called

    EXEC @hr = sp_OADestroy @zip


END
GO