我有一个带有 C# 控制台应用程序的 20 GB 服务器,还有一个 SFTP 服务器。
我想通过获取部分并在用下一部分覆盖它们之前发送它们来通过 20 GB 服务器传输 70 GB 文件。我使用了一个名为 SshNet 或 Renci.SshNet 的库,它们没有提供从 SFTP 服务器获取部分文件的功能。
我找不到任何提供该功能的教程或库。
我尝试了几个库,但没有一个起作用,我真的需要一个解决方案,但我在网上找不到。
我尝试过:
我不想使用按月订阅的付费解决方案。
SSH.NET 和 WinSCP 都有用于流式传输文件内容的 API:
SftpClient.Open
(SftpClient.OpenRead
,SftpClient.OpenWrite
)返回SftpFileStream
(Stream
的实现)。 SSH.NET流实现支持查找,因此您可以用它实现文件部分的下载。但这通常是一个次优的解决方案。见下文。Session.GetFile
返回Stream
。 WinSCP流不支持查找,因此无法使用它来实现文件部分的下载。但在大多数情况下你不需要它。而是将数据直接流式传输到另一端。我们无法帮助您进行流式传输,因为您没有告诉我们有关另一端的任何信息。无论如何,例如,如果另一端也是 SFTP,则使用 WinSCP 你可以这样做:
using (var sourceStream = sourceSession.GetFile("/remote/source/path"))
{
destinationSession.PutFile("/remote/destination/path", sourceStream);
}
与 SSH.NET 类似:
using (var sourceStream = sourceSftpClient.OpenRead("/remote/source/path"))
using (var destinationStream = destinationSftpClient.OpenWrite("/remote/destination/path"))
{
sourceStream.CopyTo(destinationStream);
}