Sample code for 30+ languages & platforms
PureBasic

SFTP Get File Date/Times in Different Formats

See more SFTP Examples

Demonstrates how to get remote file date/times in different formats.

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkStringBuilder.pb"
IncludeFile "CkSFtpFile.pb"
IncludeFile "CkSFtpDir.pb"
IncludeFile "CkSFtp.pb"
IncludeFile "CkDateTime.pb"

Procedure ChilkatExample()

    success.i = 0

    ; This 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 = "my-sftp-server.com"
    port.i = 22
    success = CkSFtp::ckConnect(sftp,hostname,port)
    If success = 0
        Debug CkSFtp::ckLastErrorText(sftp)
        CkSFtp::ckDispose(sftp)
        ProcedureReturn
    EndIf

    ; Authenticate with the SSH server. 
    success = CkSFtp::ckAuthenticatePw(sftp,"myLogin","myPassword")
    If success = 0
        Debug CkSFtp::ckLastErrorText(sftp)
        CkSFtp::ckDispose(sftp)
        ProcedureReturn
    EndIf

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

    ; Open a directory on the server...
    ; This example opens the "junk" directory located under the HOME directory of the SSH user account.
    handle.s = CkSFtp::ckOpenDir(sftp,"junk")
    If CkSFtp::ckLastMethodSuccess(sftp) = 0
        Debug CkSFtp::ckLastErrorText(sftp)
        CkSFtp::ckDispose(sftp)
        ProcedureReturn
    EndIf

    ; Download the directory listing:

    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

    ; Iterate over the files.
    ; Examine each filename and indicate those that match *FICHERO*.pdf
    ; (i.e. the filename contains the word "FICHERO" and ends in ".pdf")
    fileObj.i = CkSFtpFile::ckCreate()
    If fileObj.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

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

    caseSensitive.i = 0
    bLocalDateTime.i = 0

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

    i.i = 0
    n.i = CkSFtpDir::ckNumFilesAndDirs(dirListing)
    While i < n

        success = CkSFtpDir::ckFileAt(dirListing,i,fileObj)
        If success = 0
            Debug CkSFtpDir::ckLastErrorText(dirListing)
            CkSFtp::ckDispose(sftp)
            CkSFtpDir::ckDispose(dirListing)
            CkSFtpFile::ckDispose(fileObj)
            CkStringBuilder::ckDispose(sbFilename)
            CkDateTime::ckDispose(dt)
            ProcedureReturn
        EndIf

        Debug CkSFtpFile::ckFilename(fileObj)

        ; Get the last-modified date/time
        CkDateTime::ckSetFromRfc822(dt,CkSFtpFile::ckLastModifiedTimeStr(fileObj))

        ; Get the date/time in other formats offered by the CkDateTime object.

        ; such as Wed, 18 Oct 2017 09:08:21 GMT
        Debug "RFC822 format: " + CkDateTime::ckGetAsRfc822(dt,bLocalDateTime)

        ; such as 1990-12-31T23:59:60Z
        Debug "Timestamp: " + CkDateTime::ckGetAsTimestamp(dt,bLocalDateTime)

        ; Such as: "02/16/2008 12:15:12"  where hour is 0 to 23.
        Debug "RFC822 format: " + CkDateTime::ckGetAsIso8601(dt,"MM/DD/YYYY hh:mm:ss",bLocalDateTime)

        i = i + 1
    Wend

    Debug "Success."


    CkSFtp::ckDispose(sftp)
    CkSFtpDir::ckDispose(dirListing)
    CkSFtpFile::ckDispose(fileObj)
    CkStringBuilder::ckDispose(sbFilename)
    CkDateTime::ckDispose(dt)


    ProcedureReturn
EndProcedure