SFTP Object
 
Syntax
 
SFTP.SyncTreeUpload(localBaseDir As String, remoteBaseDir As String, ByVal mode As Long, ByVal bRecurse As Long) As Long
 
Description
Uploads a directory tree from the local filesystem to the SFTP server. Synchronization modes include:
  • mode=0: Upload all files
  • mode=1: Upload all files that do not exist on the server.
  • mode=2: Upload newer or non-existant files.
  • mode=3: Upload only newer files. If a file does not already exist on the server, it is not uploaded.
  • mode=4: transfer missing files or files with size differences.
  • mode=5: same as mode 4, but also newer files.
 
If bRecurse is 0, then the local directory tree is not recursively descended.
 
Important: If the remoteBaseDir is an absolute path, then it is a path from the root of the server's filesystem. For example, "/home/joe/targetDir". Use a relative path to specify a directory relative to the $HOME directory of the SSH user account. For example, "./targetDir".
 
Note: After this method returns, the paths of the downloaded files are available in the SyncedFiles property.
 
Returns 1 for success, 0 for failure.
 
See Also

Example
Synchronize Directory Tree
Sub Main
 
Dim success As Long
success = sftp.Connect("my-ssh-server.com",22)
If (success = 1) Then
    success = sftp.AuthenticatePw("mySshLogin","mySshPassword")
End If
 
If (success = 1) Then
    success = sftp.InitializeSftp()
End If
 
If (success <> 1) Then
    Debug.Print sftp.LastErrorText
    Exit Sub
End If
 
' Synchronize (by uploading) the local directory tree rooted at "qa_data/sftpUploadTree"
' with the remote directory tree rooted at "syncUploadTest"
' Both directories are relative paths.  The remote directory
' is relative to the HOME directory of the SSH user account.
' The local directory is relative to the current working directory of the process.
' It is also possible to use absolute paths.
 
Dim remoteDir As String
remoteDir = "syncUploadTest"
Dim localDir As String
localDir = "qa_data/sftpUploadTree"
 
' Possible modes that can be passed to the SyncTreeUpload method are:
' mode=0: Upload all files
' mode=1: Upload all files that do not exist on the server.
' mode=2: Upload newer or non-existant files.
' mode=3: Upload only newer files. If a file does not already exist on the server, it is not uploaded.
' mode=4: transfer missing files or files with size differences.
' mode=5: same as mode 4, but also newer files.
 
' This example will use mode 5 to upload missing, newer, or files with size differences.
Dim mode As Long
mode = 5
' This example turns on recursion to synchronize the entire tree.
' Recursion can be turned off to synchronize the files of a single directory.
Dim recursive As Long
recursive = 1
success = sftp.SyncTreeUpload(localDir,remoteDir,mode,recursive)
If (success <> 1) Then
    Debug.Print sftp.LastErrorText
    Exit Sub
End If
 
Debug.Print "Success."
 
End Sub
 

Example
Synchronize Tree with ProgressInfo Callbacks
Dim WithEvents Mysftp As  ChilkatSFtp
 
' ProgressInfo callback method.
Private Sub sftp_ProgressInfo(ByVal name As String, ByVal value As String)
    Debug.Print "ProgressInfo: " & name & ", " & value
 
    Dim sbName As New ChilkatStringBuilder
    success = sbName.Append(name)
    If (sbName.ContentsEqual("syncUploadFile") = 1) Then
        Dim xml As New ChilkatXml
        success = xml.LoadXml(value)
        Dim file_localPath As String
        file_localPath = xml.GetAttrValue("localPath")
        Dim file_remotePath As String
        file_remotePath = xml.GetAttrValue("remotePath")
    End If
End Sub
 
Sub Main
 
    Set  Mysftp = New ChilkatSFtp
 
    Dim success As Long
    success = Mysftp.Connect("my-ssh-server.com",22)
    If (success = 1) Then
        success = Mysftp.AuthenticatePw("mySshLogin","mySshPassword")
    End If
 
    If (success = 1) Then
        success = Mysftp.InitializeSftp()
    End If
 
    If (success <> 1) Then
        Debug.Print Mysftp.LastErrorText
        Exit Sub
    End If
 
    ' Synchronize (by uploading) the local directory tree rooted at "c:/ckAssets/qa_data/syncRemote2/"
    ' with the remote directory tree rooted at "qa/syncRemote2"
    ' The remote directory
    ' is relative to the HOME directory of the SSH user account.
    ' The local directory is an absolute path (but could be a relative path if desired)
 
    Dim remoteDir As String
    remoteDir = "qa/syncRemote2"
    Dim localDir As String
    localDir = "c:/ckAssets/qa_data/syncRemote2/"
 
    ' Possible modes that can be passed to the SyncTreeUpload method are:
    ' mode=0: Upload all files
    ' mode=1: Upload all files that do not exist on the server.
    ' mode=2: Upload newer or non-existant files.
    ' mode=3: Upload only newer files. If a file does not already exist on the server, it is not uploaded.
    ' mode=4: transfer missing files or files with size differences.
    ' mode=5: same as mode 4, but also newer files.
 
    ' Because we want to see the ProgressInfo callbacks, upload all files..
    Dim mode As Long
    mode = 0
 
    ' This example turns on recursion to synchronize the entire tree.
    ' Recursion can be turned off to synchronize the files of a single directory.
    Dim recursive As Long
    recursive = 1
    success = Mysftp.SyncTreeUpload(localDir,remoteDir,mode,recursive)
    If (success <> 1) Then
        Debug.Print Mysftp.LastErrorText
        Exit Sub
    End If
 
    Debug.Print "Success."
 
    ' Here is sample output of the above code showing the ProgressInfo values.
    ' If the name is "syncUploadFile", then the value is a snippet of XML containing the local file path and the remote file path of the file
    ' being uploaded.
 
    ' ProgressInfo: syncUploadFile, <file localPath="c:\ckAssets\qa_data\syncRemote2\accentedLatin1.txt" remotePath="qa/syncRemote2/accentedLatin1.txt" />
    ' ProgressInfo: SendByteCount, 52
    ' ProgressInfo: SendBytesPerSec, 52000
    ' ProgressInfo: syncUploadFile, <file localPath="c:\ckAssets\qa_data\syncRemote2\accentedUtf8.txt" remotePath="qa/syncRemote2/accentedUtf8.txt" />
    ' ProgressInfo: SendByteCount, 226
    ' ProgressInfo: SendBytesPerSec, 226000
    ' ProgressInfo: syncUploadFile, <file localPath="c:\ckAssets\qa_data\syncRemote2\anter_cert.pem" remotePath="qa/syncRemote2/anter_cert.pem" />
    ' ProgressInfo: SendByteCount, 2165
    ' ProgressInfo: SendBytesPerSec, 2165000
    ' ProgressInfo: syncUploadFile, <file localPath="c:\ckAssets\qa_data\syncRemote2\mv.exe" remotePath="qa/syncRemote2/mv.exe" />
    ' ProgressInfo: SendByteCount, 9922165
    ' ProgressInfo: SendBytesPerSec, 24438830
    ' ProgressInfo: SendByteCount, 20898165
    ' ProgressInfo: SendBytesPerSec, 25705000
    ' ProgressInfo: SendByteCount, 31554165
    ' ProgressInfo: SendBytesPerSec, 25885287
    ' ProgressInfo: SendByteCount, 42242165
    ' ProgressInfo: SendBytesPerSec, 25995178
    ' ProgressInfo: SendByteCount, 48066165
    ' ProgressInfo: SendBytesPerSec, 23666255
    ' ProgressInfo: SendByteCount, 50821629
    ' ProgressInfo: SendBytesPerSec, 23916060
    ' ProgressInfo: syncUploadFile, <file localPath="c:\ckAssets\qa_data\syncRemote2\abc\chiliPepper.gif" remotePath="qa/syncRemote2/abc/chiliPepper.gif" />
    ' ProgressInfo: SendByteCount, 50829347
    ' ProgressInfo: SendBytesPerSec, 23919692
    ' ProgressInfo: syncUploadFile, <file localPath="c:\ckAssets\qa_data\syncRemote2\data\chiliPepper.gif" remotePath="qa/syncRemote2/data/chiliPepper.gif" />
    ' ProgressInfo: SendByteCount, 50837065
    ' ProgressInfo: SendBytesPerSec, 23923324
    ' ProgressInfo: syncUploadFile, <file localPath="c:\ckAssets\qa_data\syncRemote2\data\xyz\dkimHtmlBody.txt" remotePath="qa/syncRemote2/data/xyz/dkimHtmlBody.txt" />
    ' ProgressInfo: SendByteCount, 50837250
    ' ProgressInfo: SendBytesPerSec, 23923411
    ' ProgressInfo: syncUploadFile, <file localPath="c:\ckAssets\qa_data\syncRemote2\data\xyz\dkimVerifyTest.eml" remotePath="qa/syncRemote2/data/xyz/dkimVerifyTest.eml" />
    ' ProgressInfo: SendByteCount, 50840884
    ' ProgressInfo: SendBytesPerSec, 23925121
    ' ProgressInfo: syncUploadFile, <file localPath="c:\ckAssets\qa_data\syncRemote2\data\xyz\emailForCreateDsn.eml" remotePath="qa/syncRemote2/data/xyz/emailForCreateDsn.eml" />
    ' ProgressInfo: SendByteCount, 50845086
    ' ProgressInfo: SendBytesPerSec, 23927099
 
End Sub