0

使用库连接到远程服务器并复制文件。我的过程运行得很好,但有一些小问题我似乎无法解决,因为库的文档相当薄。

我有两个例程工作。一个使用 Tamir.SharpSsh 类,另一个使用 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
    

当一个或多个文件存在时,我得到一个计数没有问题。当没有文件时,将引发异常。

无论如何,我的日常工作只是一些我需要帮助的小事。

tia AGP

4

3 回答 3

2

You can call the Tamir.SharpSsh.Sftp.GetFile method using the path of the file you want to check exists (example in C#, sorry):

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;
}

I have also noticed a few other issues through my use of this library - like a lack of a GetFileInfo method or recursive Gets and Puts. But overall it get the job done.

The simple fact is, Tamir.SharpSsh can't rename a file remotely - it just does not implement that functionality. You can purchase a better library that has far more features, such as:

  • Kellerman Software .NET SFTP Library
  • wodSFTP.NET
  • Rebex SFTP for .NET
  • edtFTPnet/PRO

or you could extend SharpSsh, since it is open source.

于 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 回答