Sample code for 30+ languages & platforms
PowerBuilder

Write Text at a 32-bit Offset in a Remote SFTP File

See more SFTP Examples

Demonstrates the Chilkat SFtp.WriteFileText32 method, which encodes text and writes it at a specific 32-bit byte offset in an open handle. The arguments are the handle, the offset, the charset, and the text.

Background: Explicit-offset writes enable random access — patching a fixed-length record in place, for instance, without rewriting the whole file. The offset is a byte position, not a character position, so with a variable-width encoding like UTF-8 you must account for the encoded size of preceding characters to land where you intend. After the write, the sequential position continues just past the bytes written.

Chilkat PowerBuilder Downloads

PowerBuilder
integer li_rc
long li_Success
oleobject loo_Sftp
long li_Port
string ls_Password
string ls_Handle
long li_Offset

li_Success = 0

//  Demonstrates the SFtp.WriteFileText32 method, which encodes text and writes it at a specific
//  32-bit byte offset in an open handle.  The 1st argument is the handle, the 2nd is the offset,
//  the 3rd is the charset, and the 4th is the text.

loo_Sftp = create oleobject
li_rc = loo_Sftp.ConnectToNewObject("Chilkat.SFtp")
if li_rc < 0 then
    destroy loo_Sftp
    MessageBox("Error","Connecting to COM object failed")
    return
end if

//  Connect, authenticate, and initialize the SFTP subsystem.
li_Port = 22
li_Success = loo_Sftp.Connect("sftp.example.com",li_Port)
if li_Success = 0 then
    Write-Debug loo_Sftp.LastErrorText
    destroy loo_Sftp
    return
end if

//  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.
ls_Password = "mySshPassword"

li_Success = loo_Sftp.AuthenticatePw("mySshLogin",ls_Password)
if li_Success = 0 then
    Write-Debug loo_Sftp.LastErrorText
    destroy loo_Sftp
    return
end if

li_Success = loo_Sftp.InitializeSftp()
if li_Success = 0 then
    Write-Debug loo_Sftp.LastErrorText
    destroy loo_Sftp
    return
end if

//  Open the remote file for read/write so an existing file can be modified in place.
ls_Handle = loo_Sftp.OpenFile("subdir/record.dat","readWrite","openOrCreate")
if loo_Sftp.LastMethodSuccess = 0 then
    Write-Debug loo_Sftp.LastErrorText
    destroy loo_Sftp
    return
end if

//  Overwrite 5 bytes starting at offset 10.  The offset is a byte position, not a character
//  position, so it must account for the encoded size of any multibyte characters.
li_Offset = 10
li_Success = loo_Sftp.WriteFileText32(ls_Handle,li_Offset,"utf-8","HELLO")
if li_Success = 0 then
    Write-Debug loo_Sftp.LastErrorText
    destroy loo_Sftp
    return
end if

li_Success = loo_Sftp.CloseHandle(ls_Handle)
if li_Success = 0 then
    Write-Debug loo_Sftp.LastErrorText
    destroy loo_Sftp
    return
end if

Write-Debug "Wrote at the specified offset."

loo_Sftp.Disconnect()


destroy loo_Sftp