c# sftp,获取文件的一部分,带有缓冲区

问题描述 投票:0回答:1

我有一个带有 C# 控制台应用程序的 20 GB 服务器,还有一个 sftp 服务器,

所以基本上我想通过获取部件并在用下一个部件覆盖它们之前发送 dem 来通过 20 Gb 服务器传输 70 Gb 文件

我使用了一个名为 SshNetRenci.SshNet 的库,它们没有提供从 sftp 服务器获取部分文件的功能

我找不到任何提供该功能的教程或库

我尝试了几个库,但没有一个起作用,我真的需要一个解决方案,但我在网上找不到一个

我尝试过:

  • Winscp
  • SSH 网络

我不知道如何使用按月订阅的付费解决方案。

c# file buffer sftp
1个回答
0
投票

SSH.NET 和 WinSCP 都有用于流式传输文件内容的 API:

  • SSH.NET:
    SftpClient.Open
    SftpClient.OpenRead
    SftpClient.OpenWrite
    )返回
    SftpFileStream
    Stream
    的实现)。 SSH.NET流实现支持查找,因此您可以用它实现文件部分的下载。但这通常是一个次优的解决方案。见下文。
  • WinSCP:
    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);
}
© www.soinside.com 2019 - 2024. All rights reserved.