Bir şey üzerinde çalıştım ve test ettim. Bir deneyin ve API'ye masaj yapmaktan çekinmeyin.
Öncelikle, hedef dosya adları yerine OutputStream
s'yi çağıran ChannelSftp
yöntemlerinden yararlanmanızı sağlayan bir yöntemi karşılamanız gerekir. Bunu yapmak için yansıma kullanmak istemiyorsanız, Sftp sınıfına bu yöntemi ekleyin ve SharpSSH'yi yeniden derleyin. Şimdi olan veri akışı için OpenSSH kullanabilir, bu maddeler ile
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;
}
}
}
:
public void GetWithStream(string fromFilePath, Tamir.SharpSsh.java.io.OutputStream stream)
{
cancelled = false;
SftpChannel.get(fromFilePath, stream, m_monitor);
}
sonra, Aşağıdaki gibi Tamir.SharpSsh.java.io.OutputStream
uyumlu Stream
sınıfı için bir sarım oluşturmak FileStream
ile gösterildiği gibi, seçtiğiniz akış. System.IO kullanarak
; Tamir.SharpSsh kullanarak ;
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();
}
}
Vay. Henüz denemedim - Kaçırdığım bir API çağrısı yapmayı umuyordum - ama bu benim yapmam gereken şeyin bir parçası gibi görünüyor. Şimdilik sadece bir dosyaya Get() yapacağım ama belki daha sonra buna geçeceğim. :-) – Ken
Bu eski bir soru olduğunu biliyorum, ama ben SharpSSH ve bit düzene bir kod ekliyorum, bunu https://bitbucket.org/mattgwagner/sharpssh adresinde yamaya çalışacağım. Teşekkürler!! – MattGWagner
@Matt - Harika! Katkıda bulunduğunuz için teşekkür ederim. – kbrimington