Я обнаружил, что WinSCP - отличное решение для интеграции загрузки SFTP с существующим процессом. Тем не менее, я не смог найти типы ошибок, которые могут быть выданы оболочкой .NET.
Мне нравится выполнять детальную обработку ошибок там, где я могу, но не зная, какие ошибки может выдавать DLLМне нужно использовать более широкое отслеживание ошибок. Я выполняю передачу в фоновом рабочем потоке, а пользовательский интерфейс позволяет пользователям добавлять файлы в очередь обработки во время работы приложения. Приведенный ниже код упрощает процесс получения путей к исходному и целевому объектам.
lstFTM
- это список, содержащий файлы для перемещения.
lstRes
- для регистрации каждой попытки получить
private void DoTransfer()
{
// Set up session options
SessionOptions sessionOptions = new SessionOptions
{
Protocol = Protocol.Sftp,
HostName = "ftp.somesite.com",
UserName = "user",
Password = "pass",
SshHostKeyFingerprint = "ssh-rsa 2048 ABC123xxx and so on",
};
using (Session session = new Session())
{
// Connect
try
{
session.Open(sessionOptions);
// Transfer files
const string remotePath = @"\\NAS\path\*";
foreach (string _s in lstFTM.Items)
{
try
{
session.GetFiles(_s, remotePath).Check();
lstRes.Items.Add(string.Format("{0} downloaded on {1}", _s, DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss")));
}
catch (Exception iex)
{
lstRes.Items.Add(string.Format("file transfer failed for {0} - reported error {1}", _s, iex.Message));
}
}
}
catch (Exception ex)
{
lstRes.Items.Add("session did not open (" + ex.Message + ")");
}
}
}
Это работает хорошо, но, очевидно, я бы предпочел обрабатывать различные типы исключений более осторожно (File IO vs Source not Found vs Permissions и т. Д.)