如何确定文件是否在SSH.NET中完成下载

时间:2013-12-09 19:36:11

标签: c# ssh sftp

我在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如果您想查看已下载的字节数,可能会对某些人有所帮助。它也是一个原始的进度条,很方便。我测试了帖子中的代码,它确实有效。

2 个答案:

答案 0 :(得分:3)

查看SSH source codeDownloadFile()是一个阻塞操作,在完全写入文件之前不会返回。

此外,不需要在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
        }