我在SSH.NET / C#中执行以下非常基本的任务,将文件从远程服务器下载到本地路径:
ConnectionInfo c = new PasswordConnectionInfo(remoteIP, port, username, password);
var sftp = new SftpClient(c);
sftp.Connect();
using (var stream = new FileStream(destinationFile, FileMode.Create))
{
//download the file to our local path
sftp.DownloadFile(fileName, stream);
stream.Close();
}
sftp.Disconnect();
现在确定文件是否已成功完全下载,只是代码块到达stream.Close()?或者是否有更具体的方法来确定是否所有内容都已写好?
编辑:This post如果您想查看已下载的字节数,可能会对某些人有所帮助。它也是一个原始的进度条,很方便。我测试了帖子中的代码,它确实有效。
答案 0 :(得分:3)
查看SSH source code,DownloadFile()
是一个阻塞操作,在完全写入文件之前不会返回。
此外,不需要在using块内部调用stream.Close()
,因为当退出块时对象将被Disposed。
答案 1 :(得分:0)
当我一段时间使用SSH.NET时,出于某种原因我不知道或者不喜欢.DownloadFile没有返回值这一事实。无论哪种方式,这是我当时采取的路线。
StringBuilder sb = new StringBuilder();
ConnectionInfo c = new PasswordConnectionInfo(remoteIP, port, username, password);
var sftp = new SftpClient(c);
try
{
using (StreamReader reader = sftp.OpenText(fileName))
{
string line;
while ((line = reader.ReadLine()) != null)
{
sb.AppendLine(line);
}
}
File.WriteAllText(destinationFile, sb.ToString());
}
catch(Exception ex)
{
// procress exception
}