繁体   English   中英

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

[英]SSH.NET : How to retrieve the status of file transfer from the SFTP server

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

    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可以从服务器取回状态吗?

谢谢,

尝试以此替换您的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. 使用UploadFile(Stream input, string path, Action<ulong> uploadCallback)Action<ulong> uploadCallback参数UploadFile(Stream input, string path, Action<ulong> uploadCallback) 这可用于检查已上传的字节数,并可与要发送的文件大小进行比较。

  2. 在已上传文件的路径上使用SftpFileSytemInformation GetStatus(string path) ,以检查文件是否在磁盘上再次存在其大小。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM