![]() |
Chilkat HOME Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi DLL Go Java Node.js Objective-C PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(SQL Server) Set Entry Filepath (in output Zip) when ZippingDemonstrates how to set the path for the file entry within the .zip to something different than the path in the filesystem. Note: This example requires Chilkat v11.0.0 or greater.
-- 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 -- This requires the Chilkat Zip API to have been previously unlocked. -- See Unlock Chilkat Zip 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 EXEC sp_OAMethod @zip, 'NewZip', @success OUT, 'qa_output/zipA.zip' -- When an absolute filepath is passed to AddFile, the path within the .zip -- will be one of two values: (1) just the filename part if saveExtraPath is 0, -- or (2) the full absolute path, but made relative, if saveExtraPath is 1. -- (For example, "c:/ck2000/appData/UnitTest/qa_data/hamlet.xml" made relative is -- "ck2000/appData/UnitTest/qa_data/hamlet.xml") DECLARE @saveExtraPath int SELECT @saveExtraPath = 0 EXEC sp_OAMethod @zip, 'AddFile', @success OUT, 'c:/ck2000/appData/UnitTest/qa_data/hamlet.xml', @saveExtraPath IF @success = 0 BEGIN EXEC sp_OAGetProperty @zip, 'LastErrorText', @sTmp0 OUT PRINT @sTmp0 EXEC @hr = sp_OADestroy @zip RETURN END -- When a relative path is passed to AddFile, then saveExtraPath does not apply. -- For example, assume our current working directory is "c:/ck2000/appData/UnitTest". The following -- call to AddFile creates an entry with the filepath "qa_data/hamlet.xml". EXEC sp_OAMethod @zip, 'AddFile', @success OUT, 'qa_data/hamlet.xml', @saveExtraPath IF @success = 0 BEGIN EXEC sp_OAGetProperty @zip, 'LastErrorText', @sTmp0 OUT PRINT @sTmp0 EXEC @hr = sp_OADestroy @zip RETURN END -- Examine the entries DECLARE @entry int EXEC @hr = sp_OACreate 'Chilkat.ZipEntry', @entry OUT DECLARE @numEntries int EXEC sp_OAGetProperty @zip, 'NumEntries', @numEntries OUT DECLARE @i int SELECT @i = 0 WHILE @i < @numEntries BEGIN EXEC sp_OAMethod @zip, 'EntryAt', @success OUT, @i, @entry EXEC sp_OAGetProperty @entry, 'FileName', @sTmp0 OUT PRINT @i + ': ' + @sTmp0 SELECT @i = @i + 1 END -- The output so far is: -- 0: hamlet.xml -- 1: qa_data/hamlet.xml -- If we write the .zip as-is, then the zip will have two entries -- with the filepaths as shown above. -- This writes "qa_output/zipA.zip" EXEC sp_OAMethod @zip, 'WriteZip', @success OUT -- Now change the entry filepaths to whatever is desired. EXEC sp_OAMethod @zip, 'EntryOf', @success OUT, 'hamlet.xml', @entry IF @success = 0 BEGIN PRINT 'entry not found' EXEC @hr = sp_OADestroy @zip EXEC @hr = sp_OADestroy @entry RETURN END EXEC sp_OASetProperty @entry, 'FileName', 'Shakespeare/Claudius1.xml' EXEC sp_OAMethod @zip, 'EntryOf', @success OUT, 'qa_data/hamlet.xml', @entry IF @success = 0 BEGIN PRINT 'entry not found' EXEC @hr = sp_OADestroy @zip EXEC @hr = sp_OADestroy @entry RETURN END EXEC sp_OASetProperty @entry, 'FileName', 'Shakespeare/Claudius2.xml' -- Change the name of the .zip to be written and write again: EXEC sp_OASetProperty @zip, 'FileName', 'qa_output/zipB.zip' EXEC sp_OAMethod @zip, 'WriteZipAndClose', @success OUT IF @success <> 1 BEGIN EXEC sp_OAGetProperty @zip, 'LastErrorText', @sTmp0 OUT PRINT @sTmp0 END ELSE BEGIN PRINT 'Zip created!' END -- Examine both zipA.zip and zipB.zip using 7zip (or another tool) to see the differences. EXEC @hr = sp_OADestroy @zip EXEC @hr = sp_OADestroy @entry END GO |
© 2000-2025 Chilkat Software, Inc. All Rights Reserved.