2010-04-02 18 views

Odpowiedz

14

W tym celu należy zmodyfikować zestaw SharpSSH, aby pokazać wymaganą funkcjonalność.

uzyskać kod źródłowy i otwarte $ \ SharpSSH-1.1.1.13.src \ SharpSSH \ Sftp.cs

Włóż następujących linii kodu przed końcem klasy:

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

rekompilacji i odniesienie do zrekompilowanej biblioteki DLL w twoim projekcie. Teraz będziesz mógł usuwać pliki na serwerze SFTP.

+3

Dziękujemy! Natknąłem się na to i działa idealnie. Kolejna szybka wskazówka dla każdego, kto sam chce to skompilować, warto użyć następującej po komendzie ILMerge polecenia, aby zakończyć z jednym poręcznym zbiorem o nazwie SharpSSH.dll: 'ilmerge/target: library/out:" $ (TargetDir) SharpSSH.dll "/ v2" $ (TargetDir) Tamir.SharpSSH.dll "" $ (TargetDir) DiffieHellman.dll "" $ (TargetDir) Org.Mentalis.Security.dll "' – mattmc3

+0

Pomógł mi też. Dziękuję bardzo!! – Vbp

6

Cóż można również użyć SshExec klasę, a następnie wykonać polecenie „rm” używając „RunCommand” metody. W ten sposób nie będziesz musiał przekompilować i zbudować nowej biblioteki DLL.

+0

Dzięki! To uratowało mnie przed modyfikacją biblioteki. –

21

klasie SshExec nie dla mnie, ale trochę Odbicie magia pracował:

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

To działa jak urok .. Dzięki :-) – karpanai

+1

Wow, co za brzydki hack. Czy tak wielki klient sftp nie może usunąć plików? – t3chb0t

0

Korzystanie dll Tamir za Proponuję usunąć za pomocą poniższego kodu. W ten sposób nie trzeba modyfikować biblioteki dll Tamir, podczas gdy poniższy kod można zapisać w klasie.

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