web-dev-qa-db-ja.com

C#(.NET)でSFTPサーバーにファイルをアップロードするにはどうすればよいですか?

SFTP(SSH FTP)サーバーにファイルをアップロードできる無料の.NETライブラリが存在しますか。アップロードに問題がある場合に例外をスローし、その進行状況を監視できますか?

64
Corey

多分あなたはスクリプト/制御することができます winscp

更新:winscpに、SFTPをサポートする 。NETライブラリnugetパッケージ として利用可能になりました。 SCP、およびFTPS

35
Kasprzol

次のコードは、 Rebex SFTP コンポーネントを使用してファイルをSFTPサーバーにアップロードする方法を示しています。

// create client, connect and log in 
Sftp client = new Sftp();
client.Connect(hostname);
client.Login(username, password);

// upload the 'test.Zip' file to the current directory at the server 
client.PutFile(@"c:\data\test.Zip", "test.Zip");

client.Disconnect();

次のようにLogWriterプロパティを使用して、完全な通信ログをファイルに書き込むことができます。出力例(FTPコンポーネントからですが、SFTP出力は似ています)は here にあります。

client.LogWriter = new Rebex.FileLogWriter(
   @"c:\temp\log.txt", Rebex.LogLevel.Debug); 

または、次のようにイベントを使用して通信をインターセプトします。

Sftp client = new Sftp();
client.CommandSent += new SftpCommandSentEventHandler(client_CommandSent);
client.ResponseRead += new SftpResponseReadEventHandler(client_ResponseRead);
client.Connect("sftp.example.org");

//... 
private void client_CommandSent(object sender, SftpCommandSentEventArgs e)
{
    Console.WriteLine("Command: {0}", e.Command);
}

private void client_ResponseRead(object sender, SftpResponseReadEventArgs e)
{
    Console.WriteLine("Response: {0}", e.Response);
}

詳細については、 tutorial または download トライアルとチェック samples を参照してください。

7
Martin Vobr

.netフレームワーク内でこれを解決する方法はありません。

http://www.eldos.com/sbb/sftpcompare.php は、フリーでないオプションのリストの概要を示しています。

あなたの最善の賭けは、グラナドスを使用してSSHを拡張することです。 http://www.routrek.co.jp/product/varaterm/granados.html

2
ddc0660

別のun-freeオプションについては、 edtFTPnet/PRO を試してください。 SFTPを包括的にサポートし、必要に応じてFTPS(およびもちろんFTP)もサポートします。

0
Bruce Blackshaw

残念ながら、それは.NET Framework自体にはありません。私は、あなたがFileZillaと統合できることを望んでいますが、インターフェイスを公開するとは思いません。彼らは私が思うスクリプトを持っていますが、それは明らかにそれほどきれいではありません。

SFTPを行うプロジェクトでCuteFTPを使用しました。 .NETラッパーを作成したCOMコンポーネントを公開します。あなたが見つけるキャッチは、許可です。 CuteFTPをインストールしたWindows資格情報で美しく動作しますが、他の資格情報で実行するにはDCOMで権限を設定する必要があります。

0
Mike L