15

How to delete a file from a SFTP server using Tamir Gal's SharpSSH? I have been able to accomplish other functionality but deletion.

1
  • A long belated follow-up for this question. I added this in a few updates that I did at bitbucket.org/mattgwagner/sharpssh to avoid re-compiling the library yourself. Commented Mar 12, 2012 at 16:30

4 Answers 4

24

The SshExec class didn't work for me, but a little Reflection magic worked:

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);
Sign up to request clarification or add additional context in comments.

3 Comments

Wow, what an ugly hack. Can't the so great sftp client delete files?
It's less ugly than recompiling you're own copy of the DLL. The functionality is there ready to be used, it just wasn't exposed externally, so you're just poking into the object to call it.
This saved my time!
14

To accomplish this you will need to modify the SharpSSH assembly to expose the functionality you require.

Obtain the source code and open $\SharpSSH-1.1.1.13.src\SharpSSH\Sftp.cs

Insert the following lines of code before the end of the class:

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

Recompile and reference the recompiled DLL in your project. You will now be able to delete files on the SFTP server.

1 Comment

Thank you! Stumbled upon this and it works perfectly. Just another quick tip for anyone who wants to compile this themselves, it's helpful to use the following post-build ILMerge command to end up with one handy assembly called SharpSSH.dll: ilmerge /target:library /out:"$(TargetDir)SharpSSH.dll" /v2 "$(TargetDir)Tamir.SharpSSH.dll" "$(TargetDir)DiffieHellman.dll" "$(TargetDir)Org.Mentalis.Security.dll"
6

Well you can also use SshExec class and then execute the "rm" command using "RunCommand" method. This way you wont have to recompile and build a new dll.

Comments

0

Using Tamir's dll I would suggest to delete using the below code. In this way, you need not modify Tamir's dll, whereas the below code can be written in your class.

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.