Chilkat HOME .NET Core C# Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi ActiveX Delphi DLL Go Java Lianja Mono C# Node.js Objective-C PHP ActiveX PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift 2 Swift 3,4,5... 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.
-- Important: See this note about string length limitations for strings returned by sp_OAMethod calls. -- CREATE PROCEDURE ChilkatSample AS BEGIN DECLARE @hr int DECLARE @iTmp0 int -- Important: Do not use nvarchar(max). See the warning about using nvarchar(max). DECLARE @sTmp0 nvarchar(4000) -- This requires the Chilkat Zip API to have been previously unlocked. -- See Unlock Chilkat Zip for sample code. DECLARE @zip int -- Use "Chilkat_9_5_0.Zip" for versions of Chilkat < 10.0.0 EXEC @hr = sp_OACreate 'Chilkat.Zip', @zip OUT IF @hr <> 0 BEGIN PRINT 'Failed to create ActiveX component' RETURN END DECLARE @success int EXEC sp_OAMethod @zip, 'NewZip', @success OUT, 'qa_output/zipA.zip' -- When an absolute filepath is passed to AppendOneFileOrDir, 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, 'AppendOneFileOrDir', @success OUT, 'c:/ck2000/appData/UnitTest/qa_data/hamlet.xml', @saveExtraPath IF @success <> 1 BEGIN EXEC sp_OAGetProperty @zip, 'LastErrorText', @sTmp0 OUT PRINT @sTmp0 EXEC @hr = sp_OADestroy @zip RETURN END -- When a relative path is passed to AppendOneFileOrDir, then saveExtraPath does not apply. -- For example, assume our current working directory is "c:/ck2000/appData/UnitTest". The following -- call to AppendOneFileOrDir creates an entry with the filepath "qa_data/hamlet.xml". EXEC sp_OAMethod @zip, 'AppendOneFileOrDir', @success OUT, 'qa_data/hamlet.xml', @saveExtraPath IF @success <> 1 BEGIN EXEC sp_OAGetProperty @zip, 'LastErrorText', @sTmp0 OUT PRINT @sTmp0 EXEC @hr = sp_OADestroy @zip RETURN END -- Examine the entries DECLARE @numEntries int EXEC sp_OAGetProperty @zip, 'NumEntries', @numEntries OUT DECLARE @i int SELECT @i = 0 WHILE @i < @numEntries BEGIN DECLARE @e int EXEC sp_OAMethod @zip, 'GetEntryByIndex', @e OUT, @i EXEC sp_OAGetProperty @e, 'FileName', @sTmp0 OUT PRINT @i + ': ' + @sTmp0 EXEC @hr = sp_OADestroy @e 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. DECLARE @entry int EXEC sp_OAMethod @zip, 'GetEntryByName', @entry OUT, 'hamlet.xml' EXEC sp_OAGetProperty @zip, 'LastMethodSuccess', @iTmp0 OUT IF @iTmp0 = 0 BEGIN PRINT 'entry not found' EXEC @hr = sp_OADestroy @zip RETURN END EXEC sp_OASetProperty @entry, 'FileName', 'Shakespeare/Claudius1.xml' EXEC @hr = sp_OADestroy @entry EXEC sp_OAMethod @zip, 'GetEntryByName', @entry OUT, 'qa_data/hamlet.xml' EXEC sp_OAGetProperty @zip, 'LastMethodSuccess', @iTmp0 OUT IF @iTmp0 = 0 BEGIN PRINT 'entry not found' EXEC @hr = sp_OADestroy @zip RETURN END EXEC sp_OASetProperty @entry, 'FileName', 'Shakespeare/Claudius2.xml' EXEC @hr = sp_OADestroy @entry -- 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 END GO |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.