我正在开发一种工具,一次从SFTP下载文件。我使用Tamir.Sharpssh连接到SFTP,我认为通过使用async和await可以实现。当我运行程序时,它完成没有错误,但我没有看到任何文件下载。
以下是我的代码,提前谢谢!
private async static void SFTPFileGetHelper()
{
try
{
Task<String> task1 = GetFileAsync(sftpFile1, localFile1);
Task<String> task2 = GetFileAsync(sftpFile2, localFile2);
await Task.WhenAll(task1, task2);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
public static Task<String> GetFileAsync(string remoteFilePath, string localFilePath)
{
return (Task.Run(() =>
{
try
{
Sftp conn = new Sftp(Host, Username, Password);
conn.Connect();
conn.Get(remoteFilePath, localFilePath);
conn.Close();
return remoteFilePath;
}
catch(Exception ex)
{
return ex.Message;
}
}));
}
答案 0 :(得分:0)
我找到了答案。 我不得不将SFTPFileGetHelper()从void更改为Task。 当main函数调用SFTPFileGetHelper()时,它需要从中获取结果,在这种情况下,如果SFTP下载成功,它将返回true。
private async static Task<bool> SFTPFileGetHelper()
{
try
{
Task<String> task1 = GetFileAsync(sftpFile1, localFile1);
Task<String> task2 = GetFileAsync(sftpFile2, localFile2);
await Task.WhenAll(task1, task2);
return true;
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
return false;
}
}
答案 1 :(得分:0)
您可以使用事件处理来检查当前进度以及上传的开始和结束:
Sftp.OnTransferStart += new FileTransferEvent(sshCp_OnTransferStart);
Sftp.OnTransferProgress += new FileTransferEvent(sshCp_OnTransferProgress);
Sftp.OnTransferEnd += new FileTransferEvent(sshCp_OnTransferEnd);
private void sshCp_OnTransferStart(string src, string dst, int transferredBytes, int totalBytes, string message)
{
Console.WriteLine("sshCp_OnTransferStart: " + transferredBytes + "Bytes");
}
private void sshCp_OnTransferProgress(string src, string dst, int transferredBytes, int totalBytes, string message)
{
Console.WriteLine("sshCp_OnTransferProgress: " + transferredBytes + "Bytes");
}
private void sshCp_OnTransferEnd(string src, string dst, int transferredBytes, int totalBytes, string message)
{
Console.WriteLine("sshCp_OnTransferEnd: " + transferredBytes + "Bytes");
}