Sample code for 30+ languages & platforms
Tcl

Read Text at a String Offset from a Remote SFTP File

See more SFTP Examples

Demonstrates the Chilkat SFtp.ReadFileText64s method, which is like ReadFileText64 but takes the byte offset as a decimal string. The arguments are the handle, the offset string, the maximum number of bytes, and the charset.

Background: The string-offset read exists for the same reason as its write counterpart: it lets code in languages without convenient 64-bit integers still address positions in very large files by supplying the offset as text. Functionally it is identical to the int64 version.

Chilkat Tcl Downloads

Tcl

load ./chilkat.dll

set success 0

#  Demonstrates the SFtp.ReadFileText64s method, which is like ReadFileText64 but takes the byte
#  offset as a decimal string.  The 1st argument is the handle, the 2nd is the offset string, the
#  3rd is the maximum number of bytes, and the 4th is the charset.

set sftp [new_CkSFtp]

#  Connect, authenticate, and initialize the SFTP subsystem.
set port 22
set success [CkSFtp_Connect $sftp "sftp.example.com" $port]
if {$success == 0} then {
    puts [CkSFtp_lastErrorText $sftp]
    delete_CkSFtp $sftp
    exit
}

#  Normally you would not hard-code the password in source.  You should instead obtain it
#  from an interactive prompt, environment variable, or a secrets vault.
set password "mySshPassword"

set success [CkSFtp_AuthenticatePw $sftp "mySshLogin" $password]
if {$success == 0} then {
    puts [CkSFtp_lastErrorText $sftp]
    delete_CkSFtp $sftp
    exit
}

set success [CkSFtp_InitializeSftp $sftp]
if {$success == 0} then {
    puts [CkSFtp_lastErrorText $sftp]
    delete_CkSFtp $sftp
    exit
}

set handle [CkSFtp_openFile $sftp "subdir/hugefile.dat" "readOnly" "openExisting"]
if {[CkSFtp_get_LastMethodSuccess $sftp] == 0} then {
    puts [CkSFtp_lastErrorText $sftp]
    delete_CkSFtp $sftp
    exit
}

#  Supplying the offset as a string is convenient in languages without a native 64-bit integer.
set offset "5000000000"
set numBytes 6
set text [CkSFtp_readFileText64s $sftp $handle $offset $numBytes "utf-8"]
if {[CkSFtp_get_LastMethodSuccess $sftp] == 0} then {
    puts [CkSFtp_lastErrorText $sftp]
    delete_CkSFtp $sftp
    exit
}

puts "$text"

set success [CkSFtp_CloseHandle $sftp $handle]
if {$success == 0} then {
    puts [CkSFtp_lastErrorText $sftp]
    delete_CkSFtp $sftp
    exit
}

CkSFtp_Disconnect $sftp

delete_CkSFtp $sftp