2010-04-02 62 views
13

¿Alguien sabe cómo eliminar un archivo de un servidor SFTP utilizando SharpSSH de Tamir Gal? Pude lograr otra funcionalidad, pero eliminación. Gracias por adelantado.Cómo eliminar un archivo de un servidor SFTP de forma programada utilizando SharpSSH?

+0

Un largo seguimiento tardío para esta pregunta. Añadí esto en unas pocas actualizaciones que hice en https://bitbucket.org/mattgwagner/sharpssh para evitar volver a compilar la biblioteca usted mismo. – MattGWagner

Respuesta

14

Para lograr esto, deberá modificar el conjunto SharpSSH para exponer la funcionalidad que necesita.

obtener el código fuente y $ abierta \ SharpSSH-1.1.1.13.src \ SharpSSH \ Sftp.cs

Inserte el siguiente líneas de código antes del final de la clase:

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

recompilación y hacer referencia a la DLL recompilada en su proyecto. Ahora podrá eliminar archivos en el servidor SFTP.

+3

¡Gracias! Tropezó con esto y funciona perfectamente. Solo otro consejo rápido para cualquiera que quiera compilar esto por sí mismo, es útil usar el siguiente comando ILMerge posterior a la compilación para terminar con un conjunto útil llamado SharpSSH.dll: 'ilmerge/target: library/out:" $ (TargetDir) SharpSSH.dll "/ v2" $ (TargetDir) Tamir.SharpSSH.dll "" $ (TargetDir) DiffieHellman.dll "" $ (TargetDir) Org.Mentalis.Security.dll "' – mattmc3

+0

Me ayudó también. ¡¡Muchas gracias!! – Vbp

6

bien también se puede utilizar SshExec clase y luego ejecutar el comando "rm" utilizando el método de "EjecutarComando". De esta forma, no tendrás que recompilar y construir un nuevo dll.

+0

¡Gracias! Esto me salvó de modificar la biblioteca. –

21

clase El SshExec no funcionó para mí, pero un poco de magia Reflexión trabajó:

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

Esto funciona como un encanto .. Gracias :-) – karpanai

+1

Guau, qué hack feo. ¿No puede el gran cliente sftp eliminar archivos? – t3chb0t

0

Usando DLL de Tamir sugeriría a eliminar utilizando el código de abajo. De esta forma, no necesita modificar el dll de Tamir, mientras que el código siguiente puede escribirse en su clase.

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