如何使用SharpSSH编程从SFTP服务器中删除文件?

15
如何使用Tamir Gal的SharpSSH从SFTP服务器中删除文件?我已经能够完成其他功能,但无法实现删除。

这是对这个问题的迟来的跟进。我在 https://bitbucket.org/mattgwagner/sharpssh 进行了几次更新,以避免您自己重新编译库。 - MattGWagner
4个回答

24

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);

2
哇,这是一个多么丑陋的黑客。这么伟大的sftp客户端不能删除文件吗? - t3chb0t
1
这比重新编译自己的DLL要好看一些。功能已经准备好了,只是没有在外部公开,所以你只需要在对象中探索调用它。 - Mike Mooney
这节省了我的时间! - Karuppasamy

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
也帮助了我。非常感谢你!! - Vbp

6

你也可以使用SshExec类,然后使用"RunCommand"方法执行"rm"命令。这样你就不需要重新编译和构建一个新的dll。


谢谢!这让我免于修改库文件了。 - Silviu Niculita

0

使用Tamir的dll,我建议使用以下代码进行删除。这样,您无需修改Tamir的dll,而下面的代码可以编写在您的类中。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接