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
(Objective-C) Unzip One File to a StreamDemonstrates how to unzip a particular file contained within a .zip archive to a Chilkat stream.
#import <CkoZip.h> #import <CkoZipEntry.h> #import <CkoStream.h> #import <CkoTask.h> #import <CkoStringBuilder.h> #import <NSString.h> // This example requires the Chilkat API to have been previously unlocked. // See Global Unlock Sample for sample code. CkoZip *zip = [[CkoZip alloc] init]; // First open a .zip. BOOL success = [zip OpenZip: @"qa_data/hamlet.zip"]; if (success != YES) { NSLog(@"%@",zip.LastErrorText); return; } // Find the entry to be unzipped to a stream.. CkoZipEntry *entry = [zip FirstMatchingEntry: @"*hamlet.xml"]; if (zip.LastMethodSuccess != YES) { NSLog(@"%@",zip.LastErrorText); return; } // 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. CkoStream *streamA = [[CkoStream alloc] init]; streamA.SinkFile = @"qa_output/hamletA.xml"; success = [entry UnzipToStream: streamA]; if (success != YES) { NSLog(@"%@",entry.LastErrorText); return; } // Close the stream to close the output file. success = [streamA WriteClose]; // ---------------------------------------------------------------- // Case 2a: Uzip to a stream asynchronously. CkoStream *streamB = [[CkoStream alloc] init]; CkoTask *unzipTask = [entry UnzipToStreamAsync: streamB]; if (entry.LastMethodSuccess != YES) { NSLog(@"%@",entry.LastErrorText); return; } // Start the background unzip thread. [unzipTask Run]; // Read the stream. (this is reading the unzipped file data) CkoStringBuilder *sb = [[CkoStringBuilder alloc] init]; while (streamB.EndOfStream != YES) { // Each call to ReadSb appends to the contents of sb. [streamB ReadSb: sb]; } [sb WriteFile: @"qa_output/hamletB.xml" charset: @"utf-8" emitBom: NO]; NSLog(@"%@",@"Success."); // ---------------------------------------------------------------- // Case 2b: Uzip to a stream asynchronously and emit output while reading. CkoStream *streamC = [[CkoStream alloc] init]; unzipTask = [entry UnzipToStreamAsync: streamC]; if (entry.LastMethodSuccess != YES) { NSLog(@"%@",entry.LastErrorText); return; } [unzipTask Run]; while (streamC.EndOfStream != YES) { NSString *s = [streamC ReadString]; NSLog(@"%@",s); } NSLog(@"%@",@"Success."); |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.