Sample code for 30+ languages & platforms
Tcl

FTP Download Binary File to a Stream

See more FTP Examples

Demonstrates how to FTP download a binary file to a Chilkat stream.

Note: This example requires Chilkat v9.5.0.67 or greater.

Chilkat Tcl Downloads

Tcl

load ./chilkat.dll

set success 0

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

set ftp [new_CkFtp2]

CkFtp2_put_Hostname $ftp "www.my-ftp-server.com"
CkFtp2_put_Username $ftp "mFtpLogin"
CkFtp2_put_Password $ftp "myFtpPassword"
CkFtp2_put_AuthTls $ftp 1
CkFtp2_put_Passive $ftp 1

# Connect and login to the FTP server using TLS.
set success [CkFtp2_Connect $ftp]
if {$success != 1} then {
    puts [CkFtp2_lastErrorText $ftp]
    delete_CkFtp2 $ftp
    exit
}

# We'll read the incoming data chunk-by-chunk and write to an output file.
set fac [new_CkFileAccess]

set success [CkFileAccess_OpenForWrite $fac "qa_output/penguins2.jpg"]
if {$success != 1} then {
    puts [CkFileAccess_lastErrorText $fac]
    delete_CkFtp2 $ftp
    delete_CkFileAccess $fac
    exit
}

set streamObj [new_CkStream]

# Create a task to do the FTP download.
# t is a CkTask
set t [CkFtp2_GetFileToStreamAsync $ftp "penguins2.jpg" $streamObj]
if {[CkFtp2_get_LastMethodSuccess $ftp] != 1} then {
    puts [CkFtp2_lastErrorText $ftp]
    delete_CkFtp2 $ftp
    delete_CkFileAccess $fac
    delete_CkStream $streamObj
    exit
}

# Start the task in a background thread.
CkTask_Run $t

set bd [new_CkBinData]

while {[CkStream_get_EndOfStream $streamObj] != 1} {
    # Get the next chunk of JPG bytes.
    CkStream_ReadBd $streamObj $bd
    # Do something with it..
    # In this simple example, we'll just write to the file.
    CkFileAccess_FileWriteBd $fac $bd 0 0
    # Clear for the next read.
    CkBinData_Clear $bd
}

CkFileAccess_FileClose $fac

delete_CkTask $t

puts "Success."

delete_CkFtp2 $ftp
delete_CkFileAccess $fac
delete_CkStream $streamObj
delete_CkBinData $bd