2010-04-02 8 views
13

Quelqu'un sait comment supprimer un fichier d'un serveur SFTP en utilisant SharpSSH de Tamir Gal? J'ai été en mesure d'accomplir d'autres fonctionnalités, mais la suppression. Merci d'avance.Comment supprimer un fichier d'un serveur SFTP en utilisant SharpSSH?

+0

Un long suivi tardif pour cette question. J'ai ajouté ceci dans quelques mises à jour que j'ai faites à https://bitbucket.org/mattgwagner/sharpssh pour éviter de recompiler la bibliothèque vous-même. – MattGWagner

Répondre

14

Pour ce faire, vous devrez modifier l'assemblage SharpSSH pour exposer les fonctionnalités dont vous avez besoin.

obtenir le code source et ouvert $ \ SharpSSH-1.1.1.13.src \ SharpSSH \ Sftp.cs

Insérer les lignes de code ci-dessous avant la fin de la classe:

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

recompilation et référencez la DLL recompilée dans votre projet. Vous pourrez maintenant supprimer des fichiers sur le serveur SFTP.

+3

Merci! Trébuché sur cela et cela fonctionne parfaitement. Juste un petit conseil pour ceux qui veulent compiler eux-mêmes, il est utile d'utiliser la commande ILMerge post-build suivante pour finir avec un assembly pratique appelé SharpSSH.dll: 'ilmerge/target: library/out:" $ (TargetDir) SharpSSH.dll "/ v2" $ (TargetDir) Tamir.SharpSSH.dll "" $ (TargetDir) DiffieHellman.dll "" $ (TargetDir) Org.Mentalis.Security.dll "' – mattmc3

+0

A m'a aidé aussi. Merci beaucoup!! – Vbp

6

Eh bien, vous pouvez également utiliser classe SshExec puis exécutez la commande « rm » en utilisant la méthode « RunCommand ». De cette façon, vous n'aurez pas à recompiler et à construire une nouvelle DLL.

+0

Merci! Cela m'a évité de modifier la bibliothèque. –

21

La classe SshExec ne fonctionnait pas pour moi, mais un peu de magie de réflexion a travaillé:

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

Cela fonctionne comme un charme .. Merci :-) – karpanai

+1

Wow, quel hack laid. Le super client sftp ne peut-il pas supprimer des fichiers? – t3chb0t

0

En utilisant dll Tamir Je suggère de supprimer à l'aide du code ci-dessous. De cette façon, vous n'avez pas besoin de modifier la DLL de Tamir, alors que le code ci-dessous peut être écrit dans votre classe.

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