2017-08-08 172 views
0

我使用SSH.NET库,并已书面FTP-ING文件的简单方法的服务器如下:SSH.NET:如何检索SFTP服务器文件传输的状态

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是否可以从服务器恢复状态?

谢谢

回答

0

尝试使用它替换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); 

他们要求你的函数,并没有值传递给它的功能不能被调用。

+0

我试过这个,但是我没有在o中返回的后括号中得到任何东西。 –

+0

如果你在'Console.WriteLine(o);'上放置了一个断点,它会被击中吗? 'o'必须是* something *。 – zzxyz

+0

它击中那里,但不返回一个值。 –

0

有两个选项可以工作。

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

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