Sample code for 30+ languages & platforms
PureBasic

Execute an FTP Upload Plan

See more FTP Examples

Demonstrates the Chilkat Ftp2.PutPlan method, which executes a previously created upload plan. The first argument is the plan text and the second is the local path of a completion log that records each successful operation.

Note: The local paths are relative to the application's current working directory. Absolute paths may also be used. Supply the paths appropriate to your own environment.

Background: The completion log is what makes plan execution resumable: each successful upload is recorded, so if a run is interrupted, re-executing the same plan skips the operations already logged and continues where it left off — invaluable for a large transfer over a flaky connection. The plan's stored absolute remote paths are used regardless of the current remote directory, so execution is independent of session state.

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkFtp2.pb"
IncludeFile "CkStringBuilder.pb"

Procedure ChilkatExample()

    success.i = 0

    ;  Demonstrates the Ftp2.PutPlan method, which executes a previously created upload plan.  The 1st
    ;  argument is the plan text and the 2nd is the local path of a completion log.

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

    CkFtp2::setCkHostname(ftp, "ftp.example.com")
    CkFtp2::setCkUsername(ftp, "myFtpLogin")

    ;  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.
    CkFtp2::setCkPassword(ftp, "myPassword")

    success = CkFtp2::ckConnect(ftp)
    If success = 0
        Debug CkFtp2::ckLastErrorText(ftp)
        CkFtp2::ckDispose(ftp)
        ProcedureReturn
    EndIf

    success = CkFtp2::ckChangeRemoteDir(ftp,"public_html")
    If success = 0
        Debug CkFtp2::ckLastErrorText(ftp)
        CkFtp2::ckDispose(ftp)
        ProcedureReturn
    EndIf

    ;  Load a plan that was previously created with CreatePlan.
    sbPlan.i = CkStringBuilder::ckCreate()
    If sbPlan.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success = CkStringBuilder::ckLoadFile(sbPlan,"qa_output/upload_plan.txt","utf-8")
    If success = 0
        Debug CkStringBuilder::ckLastErrorText(sbPlan)
        CkFtp2::ckDispose(ftp)
        CkStringBuilder::ckDispose(sbPlan)
        ProcedureReturn
    EndIf

    plan.s = CkStringBuilder::ckGetAsString(sbPlan)

    ;  Execute the plan.  Each successful operation is recorded in the completion log, which lets an
    ;  interrupted run be resumed without repeating completed uploads.  The plan uses its stored
    ;  absolute remote paths even if the current remote directory has changed.
    success = CkFtp2::ckPutPlan(ftp,plan,"qa_output/upload_done.log")
    If success = 0
        Debug CkFtp2::ckLastErrorText(ftp)
        CkFtp2::ckDispose(ftp)
        CkStringBuilder::ckDispose(sbPlan)
        ProcedureReturn
    EndIf

    Debug "Upload plan executed."

    success = CkFtp2::ckDisconnect(ftp)
    If success = 0
        Debug CkFtp2::ckLastErrorText(ftp)
        CkFtp2::ckDispose(ftp)
        CkStringBuilder::ckDispose(sbPlan)
        ProcedureReturn
    EndIf



    CkFtp2::ckDispose(ftp)
    CkStringBuilder::ckDispose(sbPlan)


    ProcedureReturn
EndProcedure