2010-04-02 86 views

回答

14

要完成此操作,您需要修改SharpSSH程序集以显示所需的功能。

获得源代码,并打开$ \ SharpSSH-1.1.1.13.src \ SharpSSH \ Sftp.cs

插入下面的课结束前行代码:

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

重新编译并在您的项目中引用重新编译的DLL。您现在可以删除SFTP服务器上的文件。

+3

谢谢!偶然发现,它完美的作品。对于任何想要自行编译的用户来说,使用下面的构建后ILMerge命令最终会带来一个名为SharpSSH.dll的方便程序:'ilmerge/target:library/out:“$(TargetDir) SharpSSH.dll“/ v2”$(TargetDir)Tamir.SharpSSH.dll“”$(TargetDir)DiffieHellman.dll“”$(TargetDir)Org.Mentalis.Security.dll“' – mattmc3 2010-10-20 13:02:49

+0

也帮助了我。非常感谢!! – Vbp 2013-08-19 20:33:35

6

那么你也可以使用SshExec类,然后使用“RunCommand”方法执行“RM”命令。这样你就不必重新编译并建立一个新的dll。

+0

谢谢!这使我免于修改图书馆。 – 2011-01-25 11:06:38

21

的SshExec类并没有为我工作,但有点神奇的反思工作:

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

这工作就像一个魅力..谢谢:-) – karpanai 2015-02-09 13:12:31

+1

哇,多么丑陋的黑客。不能这么好的sftp客户端删除文件? – t3chb0t 2016-02-04 17:50:04

0

使用塔米尔的DLL我会建议使用下面的代码删除。这样,你不需要修改Tamir的dll,而下面的代码可以写在你的类中。

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