SharpSSH Прогресс и переименование - PullRequest
0 голосов
/ 23 августа 2010

Использование библиотеки для подключения к удаленному серверу и копирования файла. У меня процесс работает довольно хорошо, но есть мелкие вещи, которые я не могу решить, так как документация для библиотеки довольно тонкая.

У меня работают две подпрограммы. Один использует класс Tamir.SharpSsh, а другой - класс Tamir.SharpSsh.jsch.

  1. Используя класс Tamir.SharpSsh, я могу скопировать файл с локального сервера на удаленный сервер и нажать на событие pogress. Что я не могу сделать, так это определить, существует ли на сервере конкретный файл, скажем, /Report/data.txt. Мне нужно предпринять разные действия, если он существует или не существует. Также как бы я переименовал файл на удаленном сервере. Я пытался использовать SshExec с командами 'rename', 'rn' и 'mv', но это не сработало.

  2. Используя Tamir.SharpSsh.jsch, я могу скопировать файл с локального сервера на удаленный сервер. Я также могу переименовать файл на удаленном сервере. Что я не могу сделать с этим классом, так это подключиться к событию progress, чтобы отслеживать ход копирования. Также я не могу найти хороший способ проверить, существует ли определенный файл на сервере. То, что я придумал, является грубым и единственным способом, которым я мог придумать, чтобы проверить, и это использовать

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

Когда существует один или несколько файлов, у меня нет проблем. Если файла нет, возникает исключение.

В любом случае, у меня есть подпрограммы, работающие с некоторыми мелочами, с которыми мне нужна помощь.

ТИА AGP

Ответы [ 3 ]

2 голосов
/ 23 сентября 2010

Вы можете вызвать метод 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 .NET SFTP Library
  • wodSFTP.NET
  • Rebex SFTP для .NET
  • edtFTPnet / PRO

или вы можете расширить SharpSsh, поскольку он с открытым исходным кодом.

0 голосов
/ 27 сентября 2010

да, я попробовал нечто подобное с 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
0 голосов
/ 24 августа 2010

Ваши проблемы из-за ограничений протокола SFTP. - чтобы проверить существование файла, попробуйте вернуть атрибуты этого файла; - большинство серверов пока не поддерживают переименование файлов.

...