Sample code for 30+ languages & platforms
PureBasic

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

See more SFTP Examples

Demonstrates the Chilkat SFtp.WriteFileText64 method, which encodes text and writes it at a specific 64-bit byte offset in an open handle. The arguments are the handle, the offset, the charset, and the text. The 64-bit offset supports very large files.

Background: A 32-bit offset tops out at about 4 GB, so files larger than that require the 64-bit form to address positions beyond that boundary. The behavior is otherwise identical to the 32-bit version — the only difference is the width of the offset argument, chosen to match the size of the file you are working with.

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkSFtp.pb"

Procedure ChilkatExample()

    success.i = 0

    ;  Demonstrates the SFtp.WriteFileText64 method, which encodes text and writes it at a specific
    ;  64-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.  The 64-bit offset supports very large files.

    sftp.i = CkSFtp::ckCreate()
    If sftp.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    ;  Connect, authenticate, and initialize the SFTP subsystem.
    port.i = 22
    success = CkSFtp::ckConnect(sftp,"sftp.example.com",port)
    If success = 0
        Debug CkSFtp::ckLastErrorText(sftp)
        CkSFtp::ckDispose(sftp)
        ProcedureReturn
    EndIf

    ;  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.
    password.s = "mySshPassword"

    success = CkSFtp::ckAuthenticatePw(sftp,"mySshLogin",password)
    If success = 0
        Debug CkSFtp::ckLastErrorText(sftp)
        CkSFtp::ckDispose(sftp)
        ProcedureReturn
    EndIf

    success = CkSFtp::ckInitializeSftp(sftp)
    If success = 0
        Debug CkSFtp::ckLastErrorText(sftp)
        CkSFtp::ckDispose(sftp)
        ProcedureReturn
    EndIf

    handle.s = CkSFtp::ckOpenFile(sftp,"subdir/hugefile.dat","readWrite","openOrCreate")
    If CkSFtp::ckLastMethodSuccess(sftp) = 0
        Debug CkSFtp::ckLastErrorText(sftp)
        CkSFtp::ckDispose(sftp)
        ProcedureReturn
    EndIf

    ;  Write at a byte offset beyond the 32-bit (4 GB) range.
    offset.i = 5000000000
    success = CkSFtp::ckWriteFileText64(sftp,handle,offset,"utf-8","MARKER")
    If success = 0
        Debug CkSFtp::ckLastErrorText(sftp)
        CkSFtp::ckDispose(sftp)
        ProcedureReturn
    EndIf

    success = CkSFtp::ckCloseHandle(sftp,handle)
    If success = 0
        Debug CkSFtp::ckLastErrorText(sftp)
        CkSFtp::ckDispose(sftp)
        ProcedureReturn
    EndIf

    Debug "Wrote at the 64-bit offset."

    CkSFtp::ckDisconnect(sftp)


    CkSFtp::ckDispose(sftp)


    ProcedureReturn
EndProcedure