Какие типы исключений могут быть добавлены в обработку сборкой WinSCP .NET - PullRequest
2 голосов
/ 01 октября 2019

Я обнаружил, что 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 и т. Д.)

1 Ответ

1 голос
/ 01 октября 2019

Каждый метод сборки WinSCP .NET документирует, какое исключение он может выдать.

Например, для Session.GetFiles см .:
https://winscp.net/eng/docs/library_session_getfiles#exceptions

Хотя, к сожалению, на самом деле это не так.

Это связано с внутренней реализацией сборки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...