2017-08-08 138 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)來檢查文件是否存在磁盤上的大小。