SSH.NET:如何从SFTP服务器检索文件传输的状态

时间:2017-08-08 22:16:48

标签: c# ssh ftp sftp ssh.net

我正在使用SSH.NET库并编写了一个简单的ftp文件到服务器的方法,如下所示:

    using (var client = new Renci.SshNet.SftpClient(host, port, username, password))
    {
        client.Connect();
        Console.WriteLine("Connected to {0}", host);

        using (var fileStream = new FileStream(uploadfile, FileMode.Open))
        {
            client.BufferSize = 4 * 1024; // bypass Payload error large files
            client.UploadFile(fileStream, Path.GetFileName(uploadfile));
        }
    }

如何检索从服务器返回的状态?我需要知道文件是否成功传输。

TRY ... CATCH可以从服务器恢复状态吗?

谢谢,

2 个答案:

答案 0 :(得分:1)

尝试用此替换您的UploadFile专线。这为您正在调用的函数提供回调。回调位于括号中,o为ulong。可能写入的百分比或字节数。

        client.UploadFile(fileStream, Path.GetFileName(uploadfile), (o) =>
        {
            Console.WriteLine(o);
        });

修改

以上相当于:

//I might be called multiple times during the upload process.
public void OnStatusUpdate(ulong bytesWritten)
{
    Console.WriteLine(bytesWritten);
}
...
    //later
    client.UploadFile(fileStream, Path.GetFileName(uploadfile), OnStatusUpdate);

他们正在调用你的函数,如果没有传递给它的函数,就不能调用你的函数。

答案 1 :(得分:0)

有两种选择可行。

  1. 使用Action<ulong> uploadCallback的{​​{1}}参数。这可用于检查已上载的字节数,并可与您要发送的文件的大小进行比较。

  2. 在您上传的文件的路径上使用UploadFile(Stream input, string path, Action<ulong> uploadCallback),以检查该文件是否在磁盘上再次存在。