Sample code for 30+ languages & platforms
DataFlex

SFTP Read Directory Listing

See more SFTP Examples

Demonstrates how to download a directory listing and iterate over the files.

Chilkat DataFlex Downloads

DataFlex
Use ChilkatAx-win32.pkg

Procedure Test
    Boolean iSuccess
    Handle hoSftp
    String sHostname
    Integer iPort
    String sHandle
    Variant vDirListing
    Handle hoDirListing
    Variant vFileObj
    Handle hoFileObj
    Integer i
    Integer n
    String sTemp1
    Integer iTemp1
    Boolean bTemp1

    Move False To iSuccess

    // This requires the Chilkat API to have been previously unlocked.
    // See Global Unlock Sample for sample code.

    // Important: It is helpful to send the contents of the
    // sftp.LastErrorText property when requesting support.

    Get Create (RefClass(cComChilkatSFtp)) To hoSftp
    If (Not(IsComObjectCreated(hoSftp))) Begin
        Send CreateComObject of hoSftp
    End

    // Set some timeouts, in milliseconds:
    Set ComConnectTimeoutMs Of hoSftp To 5000
    Set ComIdleTimeoutMs Of hoSftp To 10000

    // Connect to the SSH server.  
    // The standard SSH port = 22
    // The hostname may be a hostname or IP address.
    Move "www.my-sftp-server.com" To sHostname
    Move 22 To iPort
    Get ComConnect Of hoSftp sHostname iPort To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoSftp To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    // Authenticate with the SSH server.  Chilkat SFTP supports
    // both password-based authenication as well as public-key
    // authentication.  This example uses password authenication.
    Get ComAuthenticatePw Of hoSftp "myLogin" "myPassword" To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoSftp To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    // After authenticating, the SFTP subsystem must be initialized:
    Get ComInitializeSftp Of hoSftp To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoSftp To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    // Open a directory on the server...
    // Paths starting with a slash are "absolute", and are relative 
    // to the root of the file system. Names starting with any other 
    // character are relative to the user's default directory (home directory).
    // A path component of ".." refers to the parent directory, 
    // and "." refers to the current directory. 
    Get ComOpenDir Of hoSftp "." To sHandle
    Get ComLastMethodSuccess Of hoSftp To bTemp1
    If (bTemp1 = False) Begin
        Get ComLastErrorText Of hoSftp To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    // Download the directory listing:

    Get Create (RefClass(cComChilkatSFtpDir)) To hoDirListing
    If (Not(IsComObjectCreated(hoDirListing))) Begin
        Send CreateComObject of hoDirListing
    End
    Get pvComObject of hoDirListing to vDirListing
    Get ComReadDirListing Of hoSftp sHandle vDirListing To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoSftp To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    // Close the handle for the directory listing.
    Get ComCloseHandle Of hoSftp sHandle To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoSftp To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    // Iterate over the files.
    Get Create (RefClass(cComChilkatSFtpFile)) To hoFileObj
    If (Not(IsComObjectCreated(hoFileObj))) Begin
        Send CreateComObject of hoFileObj
    End
    Move 0 To i
    Get ComNumFilesAndDirs Of hoDirListing To n
    While (i < n)

        Get pvComObject of hoFileObj to vFileObj
        Get ComFileAt Of hoDirListing i vFileObj To iSuccess
        If (iSuccess = False) Begin
            Get ComLastErrorText Of hoDirListing To sTemp1
            Showln sTemp1
            Procedure_Return
        End

        Get ComFilename Of hoFileObj To sTemp1
        Showln sTemp1
        Get ComFileType Of hoFileObj To sTemp1
        Showln sTemp1
        Get ComSize32 Of hoFileObj To iTemp1
        Showln "Size in bytes: " iTemp1
        Showln "----"

        Move (i + 1) To i
    Loop

    Showln "Success."


End_Procedure