This is an old revision of the document!
Session.GetFiles Method
Downloads one or more files from remote directory to local directory.
This feature will be available only with the next release.
Advertisement
Syntax
public OperationResult<TransferEventArgs> GetFiles( string remotePath, string localPath, bool remove = false, TransferOptions options = null )
Parameters
Name | Description |
---|---|
string remotePath | Full path to remote file or directory to download. Filename in the path can be replaced with wildcard to select multiple files. When file name is omited (path ends with slash), all files and subdirectories in the remote directory are downloaded. |
string localPath | Full path to download the file to. When downloading multiple files, the filename in the path should be replaced with operation mask or omited (path ends with backslash). |
bool remove | When set to true , deletes source remote file(s) after transfer. Defaults to false . |
TransferOptions options | Transfer options. Defaults to null , what is equivalent to new TransferOptions() . |
Return Value
OperationResult<T>
holding collection of TransferEventArgs
. See also Capturing results of operations.
Advertisement
Exceptions
Exception | Condition |
---|---|
InvalidOperationException | Session is not opened. |
ArgumentException ArgumentOutOfRangeException |
Invalid combination of values of TransferOptions properties. |
SessionLocalException | Error communicating with winscp.com . See the exception documentation for details. |
TimeoutException | Timeout waiting for winscp.com to respond. |
Remarks
Event Session.FileTransferred
is raised for every downloaded file.
Example
using System; using System.Globalization; using System.IO; using WinSCP; class Example { public static int 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); } } return 0; } catch (Exception e) { Console.WriteLine("Error: {0}", e); return 1; } } }
Advertisement