Sample code for 30+ languages & platforms
PowerShell

Unzip One File to a Stream

See more Zip Examples

Demonstrates how to unzip a particular file contained within a .zip archive to a Chilkat stream.

Chilkat PowerShell Downloads

PowerShell
Add-Type -Path "C:\chilkat\ChilkatDotNet47-x64\ChilkatDotNet47.dll"

$success = $false

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

$zip = New-Object Chilkat.Zip

# First open a .zip.
$success = $zip.OpenZip("qa_data/hamlet.zip")
if ($success -eq $false) {
    $($zip.LastErrorText)
    exit
}

# Find the entry to be unzipped to a stream..
$entry = New-Object Chilkat.ZipEntry
$success = $zip.EntryMatching("*hamlet.xml",$entry)
if ($success -eq $false) {
    $($zip.LastErrorText)
    exit
}

# 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.
$streamA = New-Object Chilkat.Stream
$streamA.SinkFile = "qa_output/hamletA.xml"

$success = $entry.UnzipToStream($streamA)
if ($success -ne $true) {
    $($entry.LastErrorText)
    exit
}

# Close the stream to close the output file.
$success = $streamA.WriteClose()

# ----------------------------------------------------------------
# Case 2a: Uzip to a stream asynchronously. 
$streamB = New-Object Chilkat.Stream

$unzipTask = $entry.UnzipToStreamAsync($streamB)
if ($entry.LastMethodSuccess -ne $true) {
    $($entry.LastErrorText)
    exit
}

# Start the background unzip thread.
$unzipTask.Run()

# Read the stream.  (this is reading the unzipped file data)
$sb = New-Object Chilkat.StringBuilder
while ($streamB.EndOfStream -ne $true) {
    # Each call to ReadSb appends to the contents of sb.
    $streamB.ReadSb($sb)
}

$sb.WriteFile("qa_output/hamletB.xml","utf-8",$false)

$("Success.")

# ----------------------------------------------------------------
# Case 2b: Uzip to a stream asynchronously and emit output while reading. 
$streamC = New-Object Chilkat.Stream

$unzipTask = $entry.UnzipToStreamAsync($streamC)
if ($entry.LastMethodSuccess -ne $true) {
    $($entry.LastErrorText)
    exit
}

$unzipTask.Run()

while ($streamC.EndOfStream -ne $true) {
    $s = $streamC.ReadString()
    $($s)
}

$("Success.")