c# - WinSCP .NET 程序集在处理过程中会抛出哪些异常类型
问题描述
我发现 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
参见:
https ://winscp.net/eng/docs/library_session_getfiles#exceptions
虽然不幸的是,它并不能真正帮助您区分"File IO vs Source not Found vs Permissions 等等"。
这是由于程序集的内部实现。
推荐阅读
- vhdl - 泛型类型的 vhdl-2008 解析函数
- c++ - 如果我们使用 notify_one() 来唤醒线程,我们还需要 yield() - 在 C++ 中吗?
- c++ - 使用非参考文件调用音频质量测量
- angular - Angular 6 服务依赖注入
- amazon-web-services - AWS 超出限制的通知
- android - 在 Android Studio 中运行颤振项目时出现 Gradle 错误
- tortoisegit - 在 TortoiseGit 2.7.0 中使用旧的 Git 会破坏什么?
- android - 升级到 Android Studio 3.2 正在创建 Aapt2Exception
- c# - 使用 XDocument 使用 C# 从 XML 读取根元素不显示根元素
- javascript - “包含”Javascript 函数在 WSO2 ESB 脚本中介中不起作用