Differences

This shows you the differences between the selected revisions of the page.

2012-01-10 2012-01-11
toc (martin) example (martin)
Line 33: Line 33:
===== Remarks ===== ===== Remarks =====
Event ''[[library_session_filetransferred|Session.FileTransferred]]'' is raised for every downloaded file. Event ''[[library_session_filetransferred|Session.FileTransferred]]'' is raised for every downloaded file.
 +
 +===== Example =====
 +<code csharp>
 +using System;
 +using System.Globalization;
 +using System.IO;
 +using WinSCP;
 +
 +class Test
 +{
 +    static void Main()
 +    {
 +        try
 +        {
 +            // Setup session options
 +            SessionOptions sessionOptions = new SessionOptions();
 +            sessionOptions.Protocol = Protocol.Sftp;
 +            sessionOptions.HostName = "example.com";
 +            sessionOptions.UserName = "user";
 +            sessionOptions.Password = "mypassword";
 +            sessionOptions.SshHostKey = "ssh-rsa 1024 xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx";
 +
 +            using (Session session = new Session())
 +            {
 +                // Connect
 +                session.Open(sessionOptions);
 +
 +                string stamp = DateTime.Now.ToString("yyyyMMdd", CultureInfo.InvariantCulture);
 +                string fileName = "export_" + stamp + ".txt";
 +                string remotePath = "/home/user/sysbatch/" + fileName;
 +                string localPath = "d:\\backup\\" + fileName;
 +
 +                // Manual "remote to local" synchronization.
 +
 +                // You can achieve the same using:
 +                // session.SynchronizeDirectories(
 +                //    SynchronizationMode.Local, localPath, remotePath, false, false, SynchronizationCriteria.Time,
 +                //    new TransferOptions { IncludeMask = fileName }).Check();
 +                if (session.FileExists(remotePath))
 +                {
 +                    bool download;
 +                    if (!File.Exists(localPath))
 +                    {
 +                        Console.WriteLine("File {0} exists, local backup {1} does not", remotePath, localPath);
 +                        download = true;
 +                    }
 +                    else
 +                    {
 +                        DateTime remoteWriteTime = session.GetFileInfo(remotePath).LastWriteTime;
 +                        DateTime localWriteTime = File.GetLastWriteTime(localPath);
 +
 +                        if (remoteWriteTime > localWriteTime)
 +                        {
 +                            Console.WriteLine(
 +                                "File {0} as well as local backup {1} exist, " +
 +                                "but remote file is newer ({2}) than local backup ({3})",
 +                                remotePath, localPath, remoteWriteTime, localWriteTime);
 +                            download = true;
 +                        }
 +                        else
 +                        {
 +                            Console.WriteLine(
 +                                "File {0} as well as local backup {1} exist, " +
 +                                "but remote file is not newer ({2}) than local backup local backup ({3})",
 +                                remotePath, localPath, remoteWriteTime, localWriteTime);
 +                            download = false;
 +                        }
 +                    }
 +
 +                    if (download)
 +                    {
 +                        // Download the file and throw on any error
 +                        session.GetFiles(remotePath, localPath).Check();
 +
 +                        Console.WriteLine("Download to backup done.")
 +                    }
 +                }
 +                else
 +                {
 +                    Console.WriteLine("File {0} does not exist yet", remotePath);
 +                }
 +            }
 +        }
 +        catch (Exception e)
 +        {
 +            Console.WriteLine("Error: {0}", e);
 +        }
 +    }
 +}
 +</code>

Last modified: by martin