Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WinSCP.NET程序集在处理过程中可以引发哪些异常类型_C#_.net_Sftp_Winscp_Winscp Net - Fatal编程技术网

C# WinSCP.NET程序集在处理过程中可以引发哪些异常类型

C# WinSCP.NET程序集在处理过程中可以引发哪些异常类型,c#,.net,sftp,winscp,winscp-net,C#,.net,Sftp,Winscp,Winscp Net,我发现WinSCP是将SFTP下载与现有进程集成的一个很好的解决方案。但是,我无法找到.NET包装器可能抛出的错误类型 我喜欢在可以的地方进行粒度错误处理,但不知道DLL会抛出什么类型的错误,我需要使用更广泛的错误捕获。 我正在后台工作线程中运行传输,UI允许用户在应用程序运行时将文件添加到处理队列。下面的代码简化了获取源路径和目标路径的过程 lstFTM是保存要移动的文件的列表框。 lstRes用于记录每次尝试获取 private void DoTransfer() { // Set

我发现WinSCP是将SFTP下载与现有进程集成的一个很好的解决方案。但是,我无法找到.NET包装器可能抛出的错误类型

我喜欢在可以的地方进行粒度错误处理,但不知道DLL会抛出什么类型的错误,我需要使用更广泛的错误捕获。 我正在后台工作线程中运行传输,UI允许用户在应用程序运行时将文件添加到处理队列。下面的代码简化了获取源路径和目标路径的过程

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 + ")");
        }
    }
}

这很好,但显然我更愿意谨慎地处理不同类型的异常(文件IO与未找到的源代码与权限等等)

WinSCP.NET程序集的每个方法都记录了它可以抛出的异常

例如
Session.GetFiles
请参见:

尽管不幸的是,它并不能真正帮助您区分“文件IO与未找到源代码与权限等等”


这是由于大会的内部执行

多谢各位。我也猜到了。仍然是一个很棒的工具。非常享受它没有内存泄漏的事实。