Sample code for 30+ languages & platforms
PureBasic

Co:Z SFTP Binary File Download (from z/OS IBM Mainframe)

See more SFTP Examples

Demonstrates how to download a binary file, such as a .zip, from a Co:Z SFTP server on a z/OS IBM Mainframe.

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkSFtpDir.pb"
IncludeFile "CkSFtp.pb"

Procedure ChilkatExample()

    success.i = 0

    ; This example requires 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

    ; Connect to the SSH server.  
    hostname.s = "sftp.example.com"
    port.i = 22
    success = CkSFtp::ckConnect(sftp,hostname,port)
    If success = 0
        Debug CkSFtp::ckLastErrorText(sftp)
        CkSFtp::ckDispose(sftp)
        ProcedureReturn
    EndIf

    success = CkSFtp::ckAuthenticatePw(sftp,"myLogin","myPassword")
    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

    ; To download a binary file from the Co:Z SFTP server, 
    ; we must switch to binary mode in the following unconventional way.
    ; We pretend to fetch a directory listing for "/+mode=binary"
    ; This has the effect of putting the server in binary mode for transfers.
    handle.s = CkSFtp::ckOpenDir(sftp,"/+mode=binary")
    If CkSFtp::ckLastMethodSuccess(sftp) = 0
        Debug CkSFtp::ckLastErrorText(sftp)
        CkSFtp::ckDispose(sftp)
        ProcedureReturn
    EndIf

    ; Download the "directory listing" (but it's not actually a directory listing, and we'll just discard it.)

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

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

    ; Close the directory handle:
    success = CkSFtp::ckCloseHandle(sftp,handle)
    If success = 0
        Debug CkSFtp::ckLastErrorText(sftp)
        CkSFtp::ckDispose(sftp)
        CkSFtpDir::ckDispose(dirListing)
        ProcedureReturn
    EndIf

    ; Download the binary file:
    localFilePath.s = "c:/temp/test.zip"
    remoteFilePath.s = "test.zip"
    success = CkSFtp::ckDownloadFileByName(sftp,remoteFilePath,localFilePath)
    If success = 0
        Debug CkSFtp::ckLastErrorText(sftp)
        CkSFtp::ckDispose(sftp)
        CkSFtpDir::ckDispose(dirListing)
        ProcedureReturn
    EndIf

    Debug "Success."


    CkSFtp::ckDispose(sftp)
    CkSFtpDir::ckDispose(dirListing)


    ProcedureReturn
EndProcedure