Domanda

Utilizzando la libreria per la connessione a un server remoto e copiare un file. Ho il processo funziona abbastanza bene, ma hanno alcune cose più piccole che i cant sembrano risolvere la documentazione per la libreria è abbastanza sottile.

Ho due routine di lavoro. Una utilizzando la classe Tamir.SharpSsh e l'altro utilizzando la classe Tamir.SharpSsh.jsch.

  1. Uso della classe Tamir.SharpSsh sono in grado di copiare il file dal server locale al server remoto e toccare nell'evento pogress. Quello che non posso fare è determinare se un particolare file sul server remoto dire /Report/data.txt esiste sul server. Ho bisogno di prendere azioni diverse se esiste o se non esiste. Inoltre come faccio a rinominare un file sul server remoto. Ive ha provato utilizzando SshExec con un 'Rinomina', 'rn', e il comando 'mv' e non sembra al lavoro.

  2. Uso della Tamir.SharpSsh.jsch posso copiare il file dal server locale al server remoto. Posso anche rinominare il file sul server remoto. Quello che posso fare con questa classe è quello di sfruttare l'evento progress per tenere traccia dei progressi della copia. Anche io cant sembrano trovare un buon modo per test per vedere se un particolare file esiste sul server. Quello che ho messo a punto è grezza e l'unico modo che ho potuto venire con a prova e che è quello di utilizzare

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

Quando esiste uno o più file ottenere un conteggio non è un problema. Quando non v'è alcun file, allora viene generata un'eccezione.

In ogni caso, ho le routine di lavoro il suo solo alcune cose minori ho bisogno di aiuto.

tia AGP

È stato utile?

Soluzione

È possibile chiamare il metodo Tamir.SharpSsh.Sftp.GetFile utilizzando il percorso del file che si desidera controllare esiste (ad esempio 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;
}

Inoltre ho notato un paio di altri problemi attraverso il mio uso di questa libreria - come la mancanza di un metodo GetFileInfo o ricorsivo Ottiene e mette. Ma nel complesso è ottenere il lavoro fatto.

Il fatto è semplice, Tamir.SharpSsh non può rinominare un file in remoto - semplicemente non implementa tale funzionalità. È possibile acquistare una libreria meglio che ha di gran lunga più funzioni, come ad esempio:

  • Kellerman Software NET SFTP Biblioteca
  • wodSFTP.NET
  • Rebex SFTP per .NET
  • edtFTPnet / PRO

o si potrebbe estendere SharpSsh, dal momento che è open source.

Altri suggerimenti

I tuoi problemi sono a causa delle limitazioni del protocollo SFTP. - per verificare il file esistenza, cercare di tornare attributi di quel file; -. Maggior parte dei server non supportano rinominare file per ora

sì ho provato qualcosa di simile con Tamir.SharpSsh.jsch ma sembra strano a me che devi prendere l'eccezione di rilevare non-esistenza di un file. ecco quello che ho fatto dopo che ho postato:

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top