0

ライブラリを使用してリモートサーバーに接続し、ファイルをコピーします。プロセスはかなりうまく機能していますが、ライブラリのドキュメントがかなり薄いため、解決できない小さなものがいくつかあります。

私は2つのルーチンを実行しています。1つはTamir.SharpSshクラスを使用し、もう1つはTamir.SharpSsh.jschクラスを使用します。

  1. Tamir.SharpSshクラスを使用して、ファイルをローカルサーバーからリモートサーバーにコピーし、pogressイベントを利用することができます。私ができないことは、リモートサーバー上の特定のファイルが/Report/data.txtがサーバー上に存在するかどうかを判断することです。存在する場合と存在しない場合は、別のアクションを実行する必要があります。また、リモートサーバー上のファイルの名前を変更するにはどうすればよいですか。'rename'、'rn'、および'mv'コマンドでSshExecを使用しようとしましたが、機能しないようです。

  2. Tamir.SharpSsh.jschを使用して、ファイルをローカルサーバーからリモートサーバーにコピーできます。リモートサーバー上のファイルの名前を変更することもできます。このクラスで私ができないことは、進行状況イベントを利用して、コピーの進行状況を追跡することです。また、特定のファイルがサーバーに存在するかどうかをテストするための良い方法を見つけることができないようです。私が思いついたのは粗雑で、テストするために思いついた唯一の方法はそれを使用することです

        Dim c As ChannelSftp
        Dim vct As Tamir.SharpSsh.java.util.Vector = c.ls(sRemoteFile)
        Dim cnt As Integer = vct.Count
    

1つ以上のファイルが存在する場合、カウントは問題ありません。ファイルがない場合、例外がスローされます。

とにかく、私はルーチンが私が助けを必要とするほんのいくつかのマイナーなことをしている。

tia AGP

4

3 に答える 3

2

Tamir.SharpSsh.Sftp.GetFile確認したいファイルのパスが存在することを使用してメソッドを呼び出すことができます(C#の例、申し訳ありません):

private bool FileExists(string filePath)
{
    try
    {
        SftpConnection connection = new SftpConnection(_host, _username, _password);
        connection.Connect(_port);
        connection.Get(filePath, _toDir);
    }
    catch(JSchException)
    {
        return false;
    }
    return true;
}

GetFileInfoまた、このライブラリを使用することで、メソッドの欠如や再帰的なGets and Putsなど、他のいくつかの問題にも気づきました。しかし、全体として、それは仕事を成し遂げます。

単純な事実は、Tamir.SharpSshはファイルの名前をリモートで変更できないことです。つまり、その機能を実装していないだけです。次のような、はるかに多くの機能を備えたより優れたライブラリを購入できます。

  • Kellerman Software.NETSFTPライブラリ
  • wodSFTP.NET
  • Rebex SFTP for .NET
  • edtFTPnet / PRO

または、SharpSshはオープンソースであるため、拡張することもできます。

于 2010-09-23T11:56:44.340 に答える
0

あなたの問題はSFTPプロトコルの制限によるものです。-ファイルの存在を確認するには、そのファイルの属性を返そうとします。-現在、ほとんどのサーバーはファイルの名前変更をサポートしていません。

于 2010-08-23T20:07:31.043 に答える
0

ええ、私はTamir.SharpSsh.jschと似たようなものを試しましたが、ファイルが存在しないことを検出するために例外をキャッチする必要があるのは奇妙に思えます。これが私が投稿した後に私がしたことです:

Private Function FileExistsOnServer(ByVal c As ChannelSftp, ByVal sRemoteFile As String) As Boolean
    Try
        'get a file listing of the file
        Dim vct As Tamir.SharpSsh.java.util.Vector = c.ls(sRemoteFile)
        Dim cnt As Integer = vct.Count

        'if the count is greater than zero then the file already exists. if its 0 then the file does
        'not exist on the server
        If cnt > 0 Then
            Return True
        Else
            Return False
        End If
    Catch ex As Exception
        'if we get an exception then assume the file does not exist on the server
        Return False
    End Try
End Function
于 2010-09-27T17:52:31.473 に答える