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) Unzip One File to a StreamDemonstrates how to unzip a particular file contained within a .zip archive to a Chilkat stream.
// 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 DECLARE @sTmp0 nvarchar(4000) -- 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_9_5_0.Zip', @zip OUT IF @hr <> 0 BEGIN PRINT 'Failed to create ActiveX component' RETURN END -- First open a .zip. DECLARE @success int EXEC sp_OAMethod @zip, 'OpenZip', @success OUT, 'qa_data/hamlet.zip' IF @success <> 1 BEGIN EXEC sp_OAGetProperty @zip, 'LastErrorText', @sTmp0 OUT PRINT @sTmp0 EXEC @hr = sp_OADestroy @zip RETURN END -- Find the entry to be unzipped to a stream.. DECLARE @entry int EXEC sp_OAMethod @zip, 'FirstMatchingEntry', @entry OUT, '*hamlet.xml' EXEC sp_OAGetProperty @zip, 'LastMethodSuccess', @iTmp0 OUT IF @iTmp0 <> 1 BEGIN EXEC sp_OAGetProperty @zip, 'LastErrorText', @sTmp0 OUT PRINT @sTmp0 EXEC @hr = sp_OADestroy @zip RETURN END -- There are three ways we can unzip (inflate) to a stream. -- -- 1) Set a sink file on the stream object and call UnzipToStream synchronously. -- This unzips to the stream's sink (which is to simply unzip to a file in the filesystem). -- -- 2) Create a stream object and call UnzipToStreamAsync. This starts the unzip in a background -- thread (after Task.Run is called). Your application can then read the unzipped (inflated) file -- directly from the stream. -- -- 3) (not shown in this example) Unzip to a stream object that is the source of something else. -- -- ---------------------------------------------------------------- -- Case 1: Unzip to a file by setting the sink of streamA to a file. DECLARE @streamA int EXEC @hr = sp_OACreate 'Chilkat_9_5_0.Stream', @streamA OUT EXEC sp_OASetProperty @streamA, 'SinkFile', 'qa_output/hamletA.xml' EXEC sp_OAMethod @entry, 'UnzipToStream', @success OUT, @streamA IF @success <> 1 BEGIN EXEC sp_OAGetProperty @entry, 'LastErrorText', @sTmp0 OUT PRINT @sTmp0 EXEC @hr = sp_OADestroy @entry EXEC @hr = sp_OADestroy @zip EXEC @hr = sp_OADestroy @streamA RETURN END -- Close the stream to close the output file. EXEC sp_OAMethod @streamA, 'WriteClose', @success OUT -- ---------------------------------------------------------------- -- Case 2a: Uzip to a stream asynchronously. DECLARE @streamB int EXEC @hr = sp_OACreate 'Chilkat_9_5_0.Stream', @streamB OUT DECLARE @unzipTask int EXEC sp_OAMethod @entry, 'UnzipToStreamAsync', @unzipTask OUT, @streamB EXEC sp_OAGetProperty @entry, 'LastMethodSuccess', @iTmp0 OUT IF @iTmp0 <> 1 BEGIN EXEC sp_OAGetProperty @entry, 'LastErrorText', @sTmp0 OUT PRINT @sTmp0 EXEC @hr = sp_OADestroy @entry EXEC @hr = sp_OADestroy @zip EXEC @hr = sp_OADestroy @streamA EXEC @hr = sp_OADestroy @streamB RETURN END -- Start the background unzip thread. EXEC sp_OAMethod @unzipTask, 'Run', @success OUT -- Read the stream. (this is reading the unzipped file data) DECLARE @sb int EXEC @hr = sp_OACreate 'Chilkat_9_5_0.StringBuilder', @sb OUT EXEC sp_OAGetProperty @streamB, 'EndOfStream', @iTmp0 OUT WHILE @iTmp0 <> 1 BEGIN -- Each call to ReadSb appends to the contents of sb. EXEC sp_OAMethod @streamB, 'ReadSb', @success OUT, @sb END EXEC sp_OAMethod @sb, 'WriteFile', @success OUT, 'qa_output/hamletB.xml', 'utf-8', 0 EXEC @hr = sp_OADestroy @unzipTask PRINT 'Success.' -- ---------------------------------------------------------------- -- Case 2b: Uzip to a stream asynchronously and emit output while reading. DECLARE @streamC int EXEC @hr = sp_OACreate 'Chilkat_9_5_0.Stream', @streamC OUT EXEC sp_OAMethod @entry, 'UnzipToStreamAsync', @unzipTask OUT, @streamC EXEC sp_OAGetProperty @entry, 'LastMethodSuccess', @iTmp0 OUT IF @iTmp0 <> 1 BEGIN EXEC sp_OAGetProperty @entry, 'LastErrorText', @sTmp0 OUT PRINT @sTmp0 EXEC @hr = sp_OADestroy @entry EXEC @hr = sp_OADestroy @zip EXEC @hr = sp_OADestroy @streamA EXEC @hr = sp_OADestroy @streamB EXEC @hr = sp_OADestroy @sb EXEC @hr = sp_OADestroy @streamC RETURN END EXEC sp_OAMethod @unzipTask, 'Run', @success OUT EXEC sp_OAGetProperty @streamC, 'EndOfStream', @iTmp0 OUT WHILE @iTmp0 <> 1 BEGIN DECLARE @s nvarchar(4000) EXEC sp_OAMethod @streamC, 'ReadString', @s OUT PRINT @s END EXEC @hr = sp_OADestroy @entry EXEC @hr = sp_OADestroy @unzipTask PRINT 'Success.' EXEC @hr = sp_OADestroy @zip EXEC @hr = sp_OADestroy @streamA EXEC @hr = sp_OADestroy @streamB EXEC @hr = sp_OADestroy @sb EXEC @hr = sp_OADestroy @streamC END GO |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.