【问题标题】:Resume file transfer using SSH.NET [duplicate]使用 SSH.NET 恢复文件传输 [重复]
【发布时间】:2017-03-19 15:43:24
【问题描述】:

是否有内置方法可以使用 SSH.NET 恢复中断的文件传输?我在 WinSCP .NET API 中找到了这样的选项,但在 SSH.NET 中找不到。

【问题讨论】:

    标签: .net ssh ssh.net


    【解决方案1】:

    SftpFileStream 看起来支持 FileMode.Append。我正在试验这种方法来恢复文件传输:

    private static void WriteOrResumeRemoteFile(SftpClient remoteHost, string remoteFileName, FileStream localFileStream)
    {
        using (SftpFileStream remoteStream = remoteHost.Open(remoteFileName, FileMode.Append, FileAccess.Write))
        {
            byte[] buffer = new byte[409600];
            int bytesRead;
    
            if (remoteStream.Length > 0)
            {
                localFileStream.Seek(remoteStream.Length, SeekOrigin.Begin);
            }
    
            bytesRead = 1;
            while (bytesRead > 0)
            {
                DateTime timeBeforeRead = DateTime.Now;
    
                bytesRead = localFileStream.Read(buffer, 0, 409600);
                if (bytesRead > 0)
                {
                    remoteStream.Write(buffer, 0, bytesRead);
                    long estimatedMsRemain = Convert.ToInt64(Convert.ToDouble(localFileStream.Length - localFileStream.Position) * Convert.ToDouble((DateTime.Now - timeBeforeRead).Ticks) / Convert.ToDouble(bytesRead));
                    Debug.WriteLine(localFileStream.Position + " total bytes written (" + (Convert.ToDouble(localFileStream.Position) / Convert.ToDouble(localFileStream.Length)).ToString("p") +
                        ", ETR: " + (new TimeSpan(estimatedMsRemain)).ToString() + ")");
                }
            }
    
            remoteStream.Close();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-21
      • 2011-09-11
      • 2011-11-06
      • 1970-01-01
      • 1970-01-01
      • 2019-01-14
      相关资源
      最近更新 更多