【问题标题】:SSH.NET : How to retrieve the status of file transfer from the SFTP serverSSH.NET:如何从 SFTP 服务器检索文件传输状态
【发布时间】:2017-08-08 22:16:47
【问题描述】:

我正在使用 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 可以从服务器检索状态吗?

谢谢,

【问题讨论】:

    标签: c# ssh ftp sftp ssh.net


    【解决方案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);
    

    他们正在调用您的函数,如果没有传递值,您的函数将无法调用。

    【讨论】:

    • 我试过了,但在 o 中返回的后括号中没有任何内容。
    • 如果你在Console.WriteLine(o); 行设置断点,它会被命中吗? o 必须是某物
    • 命中但不返回值。
    • 嗯......它不是“返回”一个值,但它必须传递一个......让我再为你分解一下。编辑...
    【解决方案2】:

    有两种可行的方法。

    1. 使用UploadFile(Stream input, string path, Action<ulong> uploadCallback)Action<ulong> uploadCallback 参数。这可用于检查已上传的字节数,并可与您发送的文件的大小进行比较。

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

    【讨论】:

      猜你喜欢
      • 2010-09-06
      • 2022-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-01
      相关资源
      最近更新 更多