He trabajado algo y lo he probado. Pruébalo y siéntete libre de dar masajes a la API.
En primer lugar, deberá hacer aparecer un método que le permita aprovechar los métodos ChannelSftp
que requieren OutputStream
s en lugar de nombres de archivo de destino. Si no desea usar el reflejo para hacerlo, agregue este método a la clase Sftp y vuelva a compilar SharpSSH.
public void GetWithStream(string fromFilePath, Tamir.SharpSsh.java.io.OutputStream stream)
{
cancelled = false;
SftpChannel.get(fromFilePath, stream, m_monitor);
}
A continuación, crear un contenedor para la clase Stream
que sea compatible con Tamir.SharpSsh.java.io.OutputStream
, tales como la de abajo:
using System.IO;
using Tamir.SharpSsh.java.io;
public class GenericSftpOutputStream : OutputStream
{
Stream stream;
public GenericSftpOutputStream(Stream stream)
{
this.stream = stream;
}
public override void Write(byte[] buffer, int offset, int count)
{
stream.Write(buffer, offset, count);
}
public override void Flush()
{
stream.Flush();
}
public override void Close()
{
stream.Close();
}
public override bool CanSeek
{
get { return stream.CanSeek; }
}
public override long Seek(long offset, SeekOrigin origin)
{
return stream.Seek(offset, origin);
}
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
if (this.stream != null)
{
this.stream.Dispose();
this.stream = null;
}
}
}
Con esos ingredientes, ahora se puede utilizar OpenSSH para transmitir sus datos a la transmisión de su elección, como se muestra a continuación con un FileStream
.
usando System.IO; usando Tamir.SharpSsh;
class Program
{
static void Main(string[] args)
{
var host = "hostname";
var user = "username";
var pass = "password";
var file = "/some/remote/path.txt";
var saveas = @"C:\some\local\path";
var client = new Sftp(host, user, pass);
client.Connect();
using (var target = new GenericSftpOutputStream(File.Open(saveas, FileMode.OpenOrCreate)))
{
client.GetWithStream(file, target);
}
client.Close();
}
}
Wow. Todavía no lo he probado, esperaba una llamada API que me había perdido, pero parece que podría ser (parte de) lo que tengo que hacer. Por ahora solo voy a obtener() un archivo, pero tal vez más tarde cambie a esto. :-) – Ken
Sé que esta es una vieja pregunta, pero estoy agregando un código para SharpSSH y agilizando los bits, voy a intentar y parchear esto en https://bitbucket.org/mattgwagner/sharpssh. ¡¡Gracias!! – MattGWagner
@Matt - ¡Impresionante! Gracias por el aviso y buena-por-usted por contribuir. – kbrimington