Какие типы исключений могут быть выброшены при обработке сборкой WinSCP .NET

Я нашел 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 + ")");
        }
    }
}

Это работает хорошо, но, очевидно, я бы предпочел более осторожно обрабатывать различные типы исключений (файловый ввод-вывод, источник не найден, разрешения и т. д.)


person Paul Wichtendahl    schedule 01.10.2019    source источник


Ответы (1)


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

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

Хотя, к сожалению, это не поможет вам отличить "файловый ввод-вывод от исходного не найденного от разрешений и т. д.".

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

person Martin Prikryl    schedule 01.10.2019
comment
Спасибо. Я так и предполагал. Все-таки классный инструмент. Очень нравится тот факт, что у него нет утечек памяти. - person Paul Wichtendahl; 03.10.2019