使用SSH.NET恢复文件传输

时间:2017-03-19 15:43:24

标签: .net ssh ssh.net

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

1 个答案:

答案 0 :(得分:1)

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

private static void WriteOrResumeRemoteFile(SftpClient remoteHost, string remoteFileName, FileStream localFileStream)
{
    using (SftpFileStream remoteStream = remoteHost.Open(remoteFileName, FileMode.Append))
    {
        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();
    }
}