私は現在、SFTPを使用してRenci SSH.NETを使用してUnixサーバーにファイルをコピーしようとしています。さらに、コピーしたファイルへのシンボリックリンクを作成したいと思います。これは私のコードがどのように見えるか、基本的には、変数sftp
はSftpClient
の作業インスタンスであることに注意してください。Renci SSH.NET:シンボリックリンクを作成できますが、シンボリックリンクを削除できないのはなぜですか?
string symlinkSource = @"/msyerver/SymSource/Test001"; //source to link to, exists
string newPath = @"/msyerver/somedirectory/Test001"; //place where the symlink should be created
sftp.SymbolicLink(symlinkSource, newPath); //link newPath to symlinkSource, works!
sftp.Delete(newPath); //fails with exception!
質問です:どのように私は正しくシンボリックリンクを削除しますか?ご注意:参照先フォルダ自体ではなく、Test001
というフォルダへのリンクを削除したいだけです。なぜこれは機能しませんか? SSH.NETは残念なことに意味のある例外をスローしません。私が得る唯一のテキストは「失敗」です。これは内部的に「要求」メカニズムを使って動作するため、問題の正確な原因をデバッグできません。
私は例外を見てみると、私は見つける:SSH.NETがリンクされたフォルダを削除しようとしているよう Data: {System.Collections.ListDictionaryInternal}
ので、明らかに、それが見えます。私が望むのは、シンボリックリンク自体を削除することです。
ここではファイルの削除が含まれているので、ハックに対してアドバイスをして、通常のsshコマンド(同じライブラリを使って、sftpではなく)でリンクを削除してください。 – Evk
これはハックです.1)SFTPシェルは同じファイルシステム/パス構文を使用します。例えば、一方はchrootされ、もう一方はchrootされます。 2)あなたはシェルへのアクセスが全くないという保証はありません。 3)SFTPはすべてのシステムで同じように動作しますが、異なるシステムでは異なるシェル/コマンドが使用されます(システムは* nixシステムではないかもしれません。 –
はい、あなたは正しいです、それは確かにあまり良くありません。 – Evk