2010-04-02 13 views
13

Qualcuno sa come cancellare un file da un server SFTP usando SharpSSH di Tamir Gal? Sono stato in grado di realizzare altre funzionalità, ma la cancellazione. Grazie in anticipo.Come eliminare un file da un server SFTP in modo programmatico utilizzando SharpSSH?

+0

Un lungo follow-up tardivo per questa domanda. Ho aggiunto questo in alcuni aggiornamenti che ho fatto su https://bitbucket.org/mattgwagner/sharpssh per evitare di ricompilare la libreria da soli. – MattGWagner

risposta

14

Per eseguire questa operazione è necessario modificare l'assembly SharpSSH per esporre le funzionalità necessarie.

ottenere il codice sorgente e open $ \ SharpSSH-1.1.1.13.src \ SharpSSH \ Sftp.cs

Inserire il seguente righe di codice prima della fine della classe:

public void Delete(string path) 
{ 
    SftpChannel.rm(path); 
} 

Riconversione e fare riferimento alla DLL ricompilata nel progetto. Ora sarai in grado di eliminare i file sul server SFTP.

+3

Grazie! Siamo incappati in questo e funziona perfettamente. Solo un altro suggerimento per chiunque voglia compilare questo, è utile usare il seguente comando ILMerge post-build per finire con un comodo assembly chiamato SharpSSH.dll: 'ilmerge/target: library/out:" $ (TargetDir) SharpSSH.dll "/ v2" $ (TargetDir) Tamir.SharpSSH.dll "" $ (TargetDir) DiffieHellman.dll "" $ (TargetDir) Org.Mentalis.Security.dll "' – mattmc3

+0

Aiutato anche a me. Grazie mille!! – Vbp

6

Ebbene si può anche utilizzare SshExec classe e poi eseguire il comando "rm" usando il metodo "RunCommand". In questo modo non dovrai ricompilare e costruire una nuova DLL.

+0

Grazie! Questo mi ha salvato dalla modifica della libreria. –

21

classe Lo SshExec non ha funzionato per me, ma un po 'di magia Riflessione lavorato:

var prop = sftp.GetType().GetProperty("SftpChannel", BindingFlags.NonPublic | BindingFlags.Instance); 
var methodInfo = prop.GetGetMethod(true); 
var sftpChannel = methodInfo.Invoke(sftp, null); 
((ChannelSftp) sftpChannel).rm(ftpPath); 
+1

Questo funziona come un fascino .. Grazie :-) – karpanai

+1

Wow, che brutto scherzo. Il client sftp così grande non può cancellare i file? – t3chb0t

0

Utilizzando dll di Tamir vorrei suggerire di eliminare usando il codice seguente. In questo modo, non è necessario modificare la dll di Tamir, mentre il codice sottostante può essere scritto nella classe.

string fromFile = "https://stackoverflow.com/a/b/MyFile.txt" 
SshExec se = new SshExec(host, username, password); 
se.Connect(port); 
se.RunCommand("rm " + fromFile); 
Problemi correlati