Sample code for 30+ languages & platforms
PureBasic

SFTP Read Text File to String

See more SFTP Examples

Demonstrates how to download a text file from an SSH server directly into a string variable.

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkSFtp.pb"

Procedure ChilkatExample()

    success.i = 0

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

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

    ; Set some timeouts, in milliseconds:
    CkSFtp::setCkConnectTimeoutMs(sftp, 5000)
    CkSFtp::setCkIdleTimeoutMs(sftp, 15000)

    ; Connect to the SSH server.  
    ; The standard SSH port = 22
    ; The hostname may be a hostname or IP address.
    hostname.s = "sftp.example.com"
    port.i = 22
    success = CkSFtp::ckConnect(sftp,hostname,port)
    If success <> 1
        Debug CkSFtp::ckLastErrorText(sftp)
        CkSFtp::ckDispose(sftp)
        ProcedureReturn
    EndIf

    ; Authenticate with the SSH server.  Chilkat SFTP supports
    ; both password-based authenication as well as public-key
    ; authentication.  This example uses password authenication.
    success = CkSFtp::ckAuthenticatePw(sftp,"myLogin","myPassword")
    If success <> 1
        Debug CkSFtp::ckLastErrorText(sftp)
        CkSFtp::ckDispose(sftp)
        ProcedureReturn
    EndIf

    ; After authenticating, the SFTP subsystem must be initialized:
    success = CkSFtp::ckInitializeSftp(sftp)
    If success <> 1
        Debug CkSFtp::ckLastErrorText(sftp)
        CkSFtp::ckDispose(sftp)
        ProcedureReturn
    EndIf

    ; Open a file on the server:
    handle.s
    handle = CkSFtp::ckOpenFile(sftp,"hamlet.xml","readOnly","openExisting")
    If CkSFtp::ckLastMethodSuccess(sftp) <> 1
        Debug CkSFtp::ckLastErrorText(sftp)
        CkSFtp::ckDispose(sftp)
        ProcedureReturn
    EndIf

    ; Get the total size of this file (in bytes)
    bFollowLinks.i = 0
    bIsHandle.i = 1
    numBytes.i

    ; bFollowLinks is ignored because we are passing a handle
    ; and not a remote filename.
    ; There are alternative methods for handling file sizes
    ; greater than 32-bit.  (See the reference documentation.)
    numBytes = CkSFtp::ckGetFileSize32(sftp,handle,bFollowLinks,bIsHandle)
    If numBytes < 0
        Debug CkSFtp::ckLastErrorText(sftp)
        CkSFtp::ckDispose(sftp)
        ProcedureReturn
    EndIf

    ; The charset indicates the character encoding of the text
    ; file on the SSH server.   Setting the charset correctly
    ; allows the Chilkat SFTP component to correctly interpret
    ; the bytes that represent the characters.
    charset.s
    charset = "ansi"
    fileContents.s
    fileContents = CkSFtp::ckReadFileText(sftp,handle,numBytes,charset)
    If CkSFtp::ckLastMethodSuccess(sftp) <> 1
        Debug CkSFtp::ckLastErrorText(sftp)
        CkSFtp::ckDispose(sftp)
        ProcedureReturn
    Else
        Debug "Received file:"
        Debug fileContents
    EndIf

    ; Close the file.
    success = CkSFtp::ckCloseHandle(sftp,handle)
    If success <> 1
        Debug CkSFtp::ckLastErrorText(sftp)
        CkSFtp::ckDispose(sftp)
        ProcedureReturn
    EndIf

    Debug "Success."


    CkSFtp::ckDispose(sftp)


    ProcedureReturn
EndProcedure