2017-08-08 2 views
0

J'utilise la bibliothèque SSH.NET et ont écrit une méthode simple pour les fichiers ftp-ing à un serveur comme ci-dessous:SSH.NET: Comment récupérer l'état du transfert de fichiers à partir du serveur 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)); 
     } 
    } 

Comment puis-je récupérer l'état du transfert depuis le serveur? J'ai besoin de savoir si les fichiers sont transférés avec succès. Un TRY ... CATCH peut-il fonctionner pour récupérer l'état du serveur?

Merci,

Répondre

0

Essayez de remplacer votre ligne UploadFile avec cela. Cela fournit un rappel à la fonction que vous appelez. Le rappel est entre parenthèses avec o étant un ulong. Probablement un pourcentage ou un nombre d'octets écrits.

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

EDIT:

Ce qui précède est équivalent à ceci:

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

Ils appellent votre fonction et votre fonction ne peut être appelée sans valeur transmise à elle.

+0

J'ai essayé ceci mais je ne reçois rien dans le support arrière retourné dans o. –

+0

Si vous placez un point d'arrêt sur la ligne 'Console.WriteLine (o);', est-il touché? 'o' doit être * quelque chose *. – zzxyz

+0

Il frappe là mais ne renvoie pas de valeur. –

0

Deux options peuvent fonctionner.

  1. Utilisez le paramètre Action<ulong> uploadCallback de UploadFile(Stream input, string path, Action<ulong> uploadCallback). Cela peut être utilisé pour vérifier le nombre d'octets téléchargés et peut être comparé à la taille du fichier que vous envoyez.

  2. Utilisez SftpFileSytemInformation GetStatus(string path) sur le chemin du fichier que vous avez téléchargé, pour vérifier si le fichier existe encore une fois sa taille sur le disque.