2016-11-15 12 views
1

サーバからSSH.NETを使用して1つのファイルのみをダウンロードしようとしています。SSH.NETを使用してSFTPサーバから特定のファイルを1つダウンロードしてください。

using Renci.SshNet; 
using Renci.SshNet.Common; 
... 
public void DownloadFile(string str_target_dir) 
    { 
     client.Connect(); 
     if (client.IsConnected) 
     { 
      var files = client.ListDirectory(@"/home/xymon/data/hist"); 
      foreach (SftpFile file in files) 
      { 
       if (file.FullName== @"/home/xymon/data/hist/allevents") 
       { 
        using (Stream fileStream = File.OpenWrite(Path.Combine(str_target_dir, file.Name))) 
        { 
         client.DownloadFile(file.FullName, fileStream); 
        } 
       } 
      } 
     } 
     else 
     { 
      throw new SshConnectionException(String.Format("Can not connect to {0}@{1}",username,host)); 
     } 
    } 

私の問題私は、文字列@"/home/xymon/data/hist/allevents"SftpFileを構築する方法がわからないということです。

は、これまでのところ私は、これは持っています。

なぜ、私はforeachループを条件に使用するのですか?

ありがとうございました。

答えて

3

を呼び出すためにSftpFileは必要ありません。この方法は、プレーンパスを取ります。

/// <summary> 
/// Downloads remote file specified by the path into the stream. 
/// </summary> 
public void DownloadFile(string path, Stream output, Action<ulong> downloadCallback = null) 

が好き、それを使用します。

using (Stream fileStream = File.OpenWrite(Path.Combine(str_target_dir, "allevents"))) 
{ 
    client.DownloadFile("/home/xymon/data/hist/allevents", fileStream); 
} 

あなたはSftpClient.Get方法使用することができ、あなたが本当にSftpFileを必要と持っていた:

/// <summary> 
/// Gets reference to remote file or directory. 
/// </summary> 
public SftpFile Get(string path) 

をしかし、そうしない。

-1

あなたはファイルが存在するかどうかを確認したい場合は、あなたがそのような何かを行うことができます...

public void DownloadFile(string str_target_dir) 
    { 
     using (var client = new SftpClient(host, user, pass)) 
     { 
      client.Connect(); 
      var file = client.ListDirectory(_pacRemoteDirectory).FirstOrDefault(f => f.Name == "Name"); 
      if (file != null) 
      { 
       using (Stream fileStream = File.OpenWrite(Path.Combine(str_target_dir, file.Name))) 
       { 
        client.DownloadFile(file.FullName, fileStream); 
       } 
      } 
      else 
      { 
       //... 
      } 
     } 
    } 
関連する問題