Chilkat HOME Android™ Classic ASP C C++ C# Mono C# .NET Core C# C# UWP/WinRT DataFlex Delphi ActiveX Delphi DLL Visual FoxPro Java Lianja MFC Objective-C Perl PHP ActiveX PHP Extension PowerBuilder PowerShell PureBasic CkPython Chilkat2-Python Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ Visual Basic 6.0 VB.NET VB.NET UWP/WinRT VBScript Xojo Plugin Node.js Excel Go
(MFC) SFTP Synchronize Tree Upload with ProgressInfo CallbacksDemonstrates an SFTP synchronization tree upload (local files to SFTP server), with progress info callbacks to monitor each file uploaded.
#include <CkStringBuilder.h> #include <CkXml.h> #include <CkSFtp.h> #include <CkSFtpProgress.h> class sftpProgress : public CkSFtpProgress { public: sftpProgress() { } virtual ~sftpProgress() { } void ProgressInfo(const char *name, const char *value) { strOut.append("ProgressInfo: "); strOut.append(name); strOut.append(", "); strOut.append(value); strOut.append("\r\n"); CkStringBuilder sbName; sbName.Append(name); if (sbName.ContentsEqual("syncUploadFile") == true) { CkXml xml; xml.LoadXml(value); const char *file_localPath = xml.getAttrValue("localPath"); const char *file_remotePath = xml.getAttrValue("remotePath"); } } }; void ChilkatSample(void) { CkString strOut; // This example requires the Chilkat API to have been previously unlocked. // See Global Unlock Sample for sample code. CkSFtp sftp; sftpProgress sftp_progress; sftp.put_EventCallbackObject(&sftp_progress); bool success = sftp.Connect("my-ssh-server.com",22); if (success == true) { success = sftp.AuthenticatePw("mySshLogin","mySshPassword"); } if (success == true) { success = sftp.InitializeSftp(); } if (success != true) { strOut.append(sftp.lastErrorText()); strOut.append("\r\n"); SetDlgItemText(IDC_EDIT1,strOut.getUnicode()); return; } // 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) const char *remoteDir = "qa/syncRemote2"; const char *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.. int 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. bool recursive = true; success = sftp.SyncTreeUpload(localDir,remoteDir,mode,recursive); if (success != true) { strOut.append(sftp.lastErrorText()); strOut.append("\r\n"); SetDlgItemText(IDC_EDIT1,strOut.getUnicode()); return; } strOut.append("Success."); strOut.append("\r\n"); // 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 SetDlgItemText(IDC_EDIT1,strOut.getUnicode()); } |
© 2000-2022 Chilkat Software, Inc. All Rights Reserved.