2017-08-08 3 views
0

ich SSH.NET Bibliothek bin mit und haben ein einfaches Verfahren für ftp-ing Dateien auf einen Server wie unten geschrieben:SSH.NET: Wie den Status der Dateiübertragung vom SFTP-Server abzurufen

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)); 
     } 
    } 

Wie kann ich den Übertragungsstatus vom Server abrufen? Ich muss wissen, ob die Dateien erfolgreich übertragen werden.

Kann ein TRY ... CATCH den Status vom Server abrufen?

Danke,

Antwort

0

Versuchen Sie, Ihre Upload Linie mit diesem zu ersetzen. Dies bietet einen Rückruf für die Funktion, die Sie anrufen. Der Rückruf steht in Klammern, wobei o ein ulong ist. Wahrscheinlich ein Prozentsatz oder eine Anzahl von geschriebenen Bytes.

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

EDIT:

Die oben entspricht dies:

//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); 

sie Ihre Funktion aufrufen und Ihre Funktion kann nicht aufgerufen werden, ohne dass ein Wert an sie übergeben werden.

+0

Ich versuchte dies, aber ich bekomme nichts in der hinteren Klammer zurückgegeben in o. –

+0

Wenn Sie einen Haltepunkt in der Zeile "Console.WriteLine (o);" setzen, wird er getroffen? 'o' muss * etwas * sein. – zzxyz

+0

Es trifft dort aber gibt keinen Wert zurück. –

0

Es gibt zwei Möglichkeiten, die funktionieren könnten.

  1. Verwenden Sie den Action<ulong> uploadCallback Parameter von UploadFile(Stream input, string path, Action<ulong> uploadCallback). Dies kann verwendet werden, um die Anzahl der Bytes zu überprüfen, die hochgeladen wurden und mit der Größe der zu sendenden Datei verglichen werden können.

  2. Verwenden Sie SftpFileSytemInformation GetStatus(string path) auf den Pfad der Datei, die Sie hochgeladen haben, um zu überprüfen, ob die Datei wieder eine Größe auf der Festplatte vorhanden ist.

Verwandte Themen