2013-12-09 1 views
1

Я делаю следующее очень основную задачу в SSH.NET/C#, чтобы загрузить файл с удаленного сервера на локальный путь:Как определить, если загрузка файла выполнена в SSH.NET

ConnectionInfo c = new PasswordConnectionInfo(remoteIP, port, username, password); 
var sftp = new SftpClient(c); 
sftp.Connect(); 
using (var stream = new FileStream(destinationFile, FileMode.Create)) 
{ 

//download the file to our local path 
sftp.DownloadFile(fileName, stream); 
stream.Close(); 

} 

sftp.Disconnect(); 

Теперь определить, успешно ли загружен файл, будет ли это просто, если блок кода достигнет stream.Close()? Или есть более конкретный способ определить, все ли написано хорошо?

EDIT: This post может быть полезным для некоторых, если вы хотите узнать, сколько байтов было загружено. Это также делает примитивный индикатор выполнения, что удобно. Я тестировал код в сообщении, и он работает.

ответ

3

Глядя на source code на SSH.NET, DownloadFile() является операцией блокировки и не возвращается, пока файл не будет полностью записан.

Кроме того, вызов stream.Close() внутри используемого блока не требуется, так как объект будет удален при выходе из блока.

+0

Спасибо! Ты обалденный! – starmandeluxe

0

Когда я работал с SSH.NET некоторое время назад, по какой-то причине я не знал или не любил тот факт, что .DownloadFile не имеет возвращаемого значения. В любом случае, это был маршрут, который я взял в то время.

 StringBuilder sb = new StringBuilder(); 
     ConnectionInfo c = new PasswordConnectionInfo(remoteIP, port, username, password); 
     var sftp = new SftpClient(c); 

     try 
     { 

      using (StreamReader reader = sftp.OpenText(fileName)) 
      { 
       string line; 

       while ((line = reader.ReadLine()) != null) 
       { 
        sb.AppendLine(line); 
       } 

      } 

      File.WriteAllText(destinationFile, sb.ToString()); 

     } 
     catch(Exception ex) 
     { 
      // procress exception 
     } 
Смежные вопросы