準備
NuGetでSSH.NETをインストール
サンプル
using Renci.SshNet;
using System;
using System.Collections.Generic;
using System.IO;
namespace Sample
{
public class Sftp : IDisposable
{
/// <summary>
/// Sftpクライアント
/// </summary>
private SftpClient Client { get; set; }
/// <summary>
/// コンストラクタ
/// クライアントを生成して接続
/// </summary>
/// <param name="host">接続先</param>
/// <param name="username">ユーザー名</param>
/// <param name="password">パスワード</param>
/// <param name="port">ポート番号</param>
public Sftp(string host, string username, string password, int port = 22)
{
// 初期化
Client = null;
// クライアント生成
Client = new SftpClient(host, port, username, password);
// 接続
Client.Connect();
}
/// <summary>
/// デストラクタ
/// </summary>
public void Dispose()
{
// クライアント破棄
Client?.Dispose();
}
/// <summary>
/// ディレクトリ変更
/// </summary>
/// <param name="dir">変更先ディレクトリ</param>
public void ChangeDirectory(string dir)
{
// 指定ディレクトリに変更
Client.ChangeDirectory(dir);
}
/// <summary>
/// ファイル一覧取得
/// </summary>
/// <param name="dir">取得対象ディレクトリ</param>
/// <returns>ファイル一覧</returns>
public List<string> Files(string dir = "")
{
// ワーク
var files = new List<string>();
// 一覧取得
foreach (var file in Client.ListDirectory(dir))
if (file.IsRegularFile)
files.Add(file.Name);
// ファイル一覧を返す
return files;
}
/// <summary>
/// ファイル存在確認
/// </summary>
/// <param name="path">ファイルパス</param>
/// <returns></returns>
public bool Exists(string path)
{
return Client.Exists(path);
}
/// <summary>
/// アップロード処理
/// </summary>
/// <param name="src">元ファイルパス</param>
/// <param name="dst">先ファイルパス</param>
/// <returns></returns>
public bool Upload(string src, string dst)
{
// アップロードするファイルがない場合
if (!File.Exists(src))
return false;
// 同名ファイルが既にアップロード先にある場合
if (Client.Exists(dst))
return false;
// アップロード処理
using (var fs = new FileStream(src, FileMode.Open))
Client.UploadFile(fs, dst);
// 正常終了
return true;
}
/// <summary>
/// ダウンロード処理
/// </summary>
/// <param name="src">元ファイルパス</param>
/// <param name="dst">先ファイルパス</param>
/// <returns>true : 正常, false : 異常</returns>
public bool Download(string src, string dst)
{
// ダウンロードするファイルが存在しない場合
if (!Client.Exists(src))
return false;
// 同名のファイルがすでに存在する場合
if (File.Exists(dst))
return false;
// ダウンロード処理
using (var fs = File.Create(dst))
Client.DownloadFile(src, fs);
// 正常終了
return true;
}
}
}
