SSH.NET ライブラリのクラスを使用して SFTP サーバーにファイルをアップロードしたりダウンロードしたりできることはわかっていますSftpClient
が、このクラスを使用して SFTP サーバー上のリモート ファイルをコピーまたは移動する方法がよくわかりません。また、インターネット上で関連資料も見つかりませんでした。SSH.NET ライブラリと C# を使用して、ディレクトリ A からディレクトリ B にリモート ファイルをコピーまたは移動するにはどうすればよいですか。
アップデート:また、以下のコードを使用してクラスを試してみましたSshClient
が、エラーも例外も発生せず、何も起こりませんでした。
ConnectionInfo ConnNfo = new ConnectionInfo("FTPHost", 22, "FTPUser",
new AuthenticationMethod[]{
// Pasword based Authentication
new PasswordAuthenticationMethod("FTPUser","FTPPass")
}
);
using (var ssh = new SshClient(ConnNfo))
{
ssh.Connect();
if (ssh.IsConnected)
{
string comm = "pwd";
using (var cmd = ssh.CreateCommand(comm))
{
var returned = cmd.Execute();
var output = cmd.Result;
var err = cmd.Error;
var stat = cmd.ExitStatus;
}
}
ssh.Disconnect();
}
Visual Studio コンソールでは、以下の出力が表示されます。
*SshNet.Logging Verbose: 1: サーバーにメッセージを送信します 'ChannelRequestMessage': 'SSH_MSG_CHANNEL_REQUEST: #152199'。
SshNet.Logging 詳細: 1: サーバーからの ReceiveMessage: 'ChannelFailureMessage': 'SSH_MSG_CHANNEL_FAILURE: #0'.*
ベストアンサー1
Renci による NuGet パッケージ SSH.NET では、以下を使用します。
using Renci.SshNet;
using Renci.SshNet.SftpClient;
...
SftpClient _sftp = new SftpClient(_host, _username, _password);
ファイルを移動するには:
var inFile = _sftp.Get(inPath);
inFile.MoveTo(outPath);
ファイルをコピーするには:
var fsIn = _sftp.OpenRead(inPath);
var fsOut = _sftp.OpenWrite(outPath);
int data;
while ((data = fsIn.ReadByte()) != -1)
fsOut.WriteByte((byte)data);
fsOut.Flush();
fsIn.Close();
fsOut.Close();