Tôi đã làm việc gì đó và thử nghiệm nó. Hãy thử và cảm thấy tự do để xoa bóp API.
Trước hết, bạn sẽ cần phải hiển thị phương pháp cho phép bạn tận dụng các phương pháp ChannelSftp
yêu cầu OutputStream
s thay vì tên tệp đích. Nếu bạn không muốn sử dụng sự phản chiếu để làm điều đó, thì hãy thêm phương thức này vào lớp Sftp và biên dịch lại SharpSSH.
public void GetWithStream(string fromFilePath, Tamir.SharpSsh.java.io.OutputStream stream)
{
cancelled = false;
SftpChannel.get(fromFilePath, stream, m_monitor);
}
Tiếp theo, tạo một wrapper cho lớp Stream
đó là tương thích với Tamir.SharpSsh.java.io.OutputStream
, chẳng hạn như hình dưới đây:
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;
}
}
}
Với những thành phần, bây giờ bạn có thể sử dụng OpenSSH stream dữ liệu của nó đến luồng bạn chọn, như được minh họa dưới đây với một số FileStream
.
bằng System.IO; sử dụng 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. Tôi vẫn chưa thử - tôi đã hy vọng một cuộc gọi API mà tôi đã bỏ lỡ - nhưng có vẻ như nó có thể là một phần của những gì tôi cần làm. Bây giờ tôi sẽ chỉ Get() vào một tập tin, nhưng có lẽ sau này tôi sẽ chuyển sang điều này. :-) – Ken
Tôi biết đây là một câu hỏi cũ, nhưng tôi đang thêm vào một số mã để SharpSSH và tinh giản bit, tôi sẽ cố gắng và vá lỗi này tại https://bitbucket.org/mattgwagner/sharpssh. Cảm ơn!! – MattGWagner
@Matt - Tuyệt vời! Cảm ơn bạn đã đứng đầu và chúc bạn đóng góp. – kbrimington