Sample code for 30+ languages & platforms
SQL Server

Controlling paths within a Zip

See more Zip Examples

How to control the paths stored within a .zip.

Chilkat SQL Server Downloads

SQL Server
--
CREATE PROCEDURE ChilkatSample
AS
BEGIN
    DECLARE @hr int
    DECLARE @sTmp0 nvarchar(4000)
    DECLARE @success int
    SELECT @success = 0

    --  This example requires the Chilkat API to have been previously unlocked.
    --  See Global Unlock Sample for sample code.

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

    --  This is the directory structure on the local filesystem
    --  from which we'll create .zip archives:
    --  The root directory is /temp/filesToZip
    --  
    --  We have these files:
    --  /temp/filesToZip/faxCover.doc
    --  /temp/filesToZip/exe/Setup.exe
    --  /temp/filesToZip/images/cheese.jpg
    --  /temp/filesToZip/images/dude.gif
    --  /temp/filesToZip/images/img3.gif
    --  /temp/filesToZip/images/img4.gif
    --  /temp/filesToZip/images/img5.gif
    --  /temp/filesToZip/images/scream.jpg
    --  /temp/filesToZip/images/imageInfo/scream.xml
    --  /temp/filesToZip/images/imageInfo/cheese.xml
    --  /temp/filesToZip/text/html/bonaireFishing.html
    --  /temp/filesToZip/text/html/upload.html
    --  /temp/filesToZip/text/txt/hello.txt
    --  /temp/filesToZip/text/txt/HelloWorld123.txt
    --  /temp/filesToZip/text/xml/hamlet.xml
    --  /temp/filesToZip/text/xml/pigs.xml

    --  There are three properties to help control the paths stored
    --  within a .zip:
    --  AppendFromDir
    --  PathPrefix
    --  DiscardPaths
    --  

    --  First we'll demonstrate AppendFromDir
    --  When a directory tree is appended via AppendFiles or
    --  AppendFilesEx, the AppendFromDir sets the base of the 
    --  directory tree appended (if the file pattern contains a 
    --  relative path, or no path at all).

    --  Clear the zip object.
    EXEC sp_OAMethod @zip, 'NewZip', @success OUT, 'test1.zip'

    DECLARE @recurse int
    SELECT @recurse = 1

    EXEC sp_OASetProperty @zip, 'AppendFromDir', '/temp/filesToZip'
    EXEC sp_OAMethod @zip, 'AppendFiles', @success OUT, '*.xml', @recurse

    --  The zip will contain:
    --  images/imageInfo/scream.xml
    --  images/imageInfo/cheese.xml
    --  text/xml/hamlet.xml
    --  text/xml/pigs.xml

    EXEC sp_OAMethod @zip, 'WriteZipAndClose', @success OUT
    IF @success <> 1
      BEGIN
        EXEC sp_OAGetProperty @zip, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @zip
        RETURN
      END

    --  Clear the zip object.
    EXEC sp_OAMethod @zip, 'NewZip', @success OUT, 'test2.zip'

    EXEC sp_OASetProperty @zip, 'AppendFromDir', '/temp/filesToZip/images'
    EXEC sp_OAMethod @zip, 'AppendFiles', @success OUT, '*.xml', @recurse
    EXEC sp_OASetProperty @zip, 'AppendFromDir', '/temp/filesToZip/text'
    EXEC sp_OAMethod @zip, 'AppendFiles', @success OUT, '*.xml', @recurse

    --  The zip will contain:
    --  imageInfo/scream.xml
    --  imageInfo/cheese.xml
    --  xml/hamlet.xml
    --  xml/pigs.xml

    EXEC sp_OAMethod @zip, 'WriteZipAndClose', @success OUT
    IF @success <> 1
      BEGIN
        EXEC sp_OAGetProperty @zip, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @zip
        RETURN
      END

    --  The PathPrefix property adds an arbitrary path prefix to each
    --  file in the .zip.
    --  For example:

    --  Clear the zip object.
    EXEC sp_OAMethod @zip, 'NewZip', @success OUT, 'test3.zip'

    EXEC sp_OASetProperty @zip, 'PathPrefix', 'chilkat/'

    EXEC sp_OASetProperty @zip, 'AppendFromDir', '/temp/filesToZip/images'
    EXEC sp_OAMethod @zip, 'AppendFiles', @success OUT, '*.xml', @recurse
    EXEC sp_OASetProperty @zip, 'AppendFromDir', '/temp/filesToZip/text'
    EXEC sp_OAMethod @zip, 'AppendFiles', @success OUT, '*.xml', @recurse

    --  The zip will contain:
    --  chilkat/imageInfo/scream.xml
    --  chilkat/imageInfo/cheese.xml
    --  chilkat/xml/hamlet.xml
    --  chilkat/xml/pigs.xml

    EXEC sp_OAMethod @zip, 'WriteZipAndClose', @success OUT
    IF @success <> 1
      BEGIN
        EXEC sp_OAGetProperty @zip, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @zip
        RETURN
      END

    --  The DiscardPaths property removes the path from each file
    --  in the zip:
    --  For example:

    --  Clear the zip object.
    EXEC sp_OAMethod @zip, 'NewZip', @success OUT, 'test4.zip'

    EXEC sp_OASetProperty @zip, 'PathPrefix', ''
    EXEC sp_OASetProperty @zip, 'DiscardPaths', 1

    EXEC sp_OASetProperty @zip, 'AppendFromDir', '/temp/filesToZip/'
    EXEC sp_OAMethod @zip, 'AppendFiles', @success OUT, '*', @recurse

    --  The zip will contain:
    --  faxCover.doc
    --  Setup.exe
    --  cheese.jpg
    --  dude.gif
    --  img3.gif
    --  img4.gif
    --  img5.gif
    --  scream.jpg
    --  scream.xml
    --  cheese.xml
    --  bonaireFishing.html
    --  upload.html
    --  hello.txt
    --  HelloWorld123.txt
    --  hamlet.xml
    --  pigs.xml

    EXEC sp_OAMethod @zip, 'WriteZipAndClose', @success OUT
    IF @success <> 1
      BEGIN
        EXEC sp_OAGetProperty @zip, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @zip
        RETURN
      END

    --  You can combine PathPrefix with DiscardPaths:

    --  Clear the zip object.
    EXEC sp_OAMethod @zip, 'NewZip', @success OUT, 'test5.zip'

    EXEC sp_OASetProperty @zip, 'PathPrefix', 'chilkat/'
    EXEC sp_OASetProperty @zip, 'DiscardPaths', 1

    EXEC sp_OASetProperty @zip, 'AppendFromDir', '/temp/filesToZip/'
    EXEC sp_OAMethod @zip, 'AppendFiles', @success OUT, '*', @recurse

    --  The zip will contain:
    --  chilkat/faxCover.doc
    --  chilkat/Setup.exe
    --  chilkat/cheese.jpg
    --  chilkat/dude.gif
    --  chilkat/img3.gif
    --  chilkat/img4.gif
    --  chilkat/img5.gif
    --  chilkat/scream.jpg
    --  chilkat/scream.xml
    --  chilkat/cheese.xml
    --  chilkat/bonaireFishing.html
    --  chilkat/upload.html
    --  chilkat/hello.txt
    --  chilkat/HelloWorld123.txt
    --  chilkat/hamlet.xml
    --  chilkat/pigs.xml

    EXEC sp_OAMethod @zip, 'WriteZipAndClose', @success OUT
    IF @success <> 1
      BEGIN
        EXEC sp_OAGetProperty @zip, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @zip
        RETURN
      END

    --  One last example -- combine DiscardPaths with PathPrefix
    --  with multiple calls to AppendFiles:

    --  Clear the zip object.
    EXEC sp_OAMethod @zip, 'NewZip', @success OUT, 'test6.zip'

    EXEC sp_OASetProperty @zip, 'DiscardPaths', 1
    EXEC sp_OASetProperty @zip, 'AppendFromDir', '/temp/filesToZip/'

    --  Get all .gif files:
    EXEC sp_OASetProperty @zip, 'PathPrefix', 'gif/'
    EXEC sp_OAMethod @zip, 'AppendFiles', @success OUT, '*.gif', @recurse

    --  Get all .jpg files:
    EXEC sp_OASetProperty @zip, 'PathPrefix', 'jpg/'
    EXEC sp_OAMethod @zip, 'AppendFiles', @success OUT, '*.jpg', @recurse

    --  Get all .xml files:
    EXEC sp_OASetProperty @zip, 'PathPrefix', 'xml/'
    EXEC sp_OAMethod @zip, 'AppendFiles', @success OUT, '*.xml', @recurse

    --  The zip will contain:
    --  jpg/cheese.jpg
    --  gif/dude.gif
    --  gif/img3.gif
    --  gif/img4.gif
    --  gif/img5.gif
    --  jpg/scream.jpg
    --  xml/scream.xml
    --  xml/cheese.xml
    --  xml/hamlet.xml
    --  xml/pigs.xml

    EXEC sp_OAMethod @zip, 'WriteZipAndClose', @success OUT
    IF @success <> 1
      BEGIN
        EXEC sp_OAGetProperty @zip, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @zip
        RETURN
      END

    EXEC @hr = sp_OADestroy @zip


END
GO