gpt4 book ai didi

c# - 使用 SSH.Net 下载和返回非阻塞数据流

转载 作者:行者123 更新时间:2023-11-30 16:55:12 27 4
gpt4 key购买 nike

我正在使用 ssh.net library用于执行 SFTP 操作以处理大型数据文件 (>=500MB)

我对如何以非阻塞方式返回数据有疑问。

ftpClient.DownloadFile() 方法签名没问题,在写入文件时或者如果有某种方法我可以实例化流,但在我想使用它时遇到问题不阻塞地返回一个流。

到目前为止,我看到的所有示例都是将下载内容写入 Filestream。没有什么只是返回一个流

借助 .Net 的内置 FTP,您只需使用 response.GetResponseStream(),它就会无阻塞地流回数据。

在返回语句中使用它的唯一方法是写入一个临时文件。但这导致它成为阻塞操作。

        var tmpFilename = "temp.dat";
int bufferSize = 4096;
var sourceFile = "23-04-2015.dat";

using (var stream = System.IO.File.Create(tmpFilename , bufferSize, System.IO.FileOptions.DeleteOnClose))
{
sftpClient.DownloadFile(sourceFile, stream);
return stream;
}

我不希望它阻塞而是流回数据。

我也想避免创建临时文件。

是否有替代实现方式使其流回数据?

或者有没有我可以实例化的替代流(MemoryStream 除外),它适用于大文件?

最佳答案

这是个老问题,但我也遇到过类似的问题。如果您想直接获取流,您可以写入 MemoryStream。

SftpClient _sftpClient;
_sftpClient = new SftpClient("sftp.server.domain", "MyLoginHere", "MyPasswordHere");
Stream fileBody = new MemoryStream();
_sftpClient.DownloadFile(ftpFile.FullName, fileBody);
fileBody.Position = 0; //dont forget to set the stream position back to beginning

如果你想下载文件,你可以在单独的线程或异步调用,然后调用委托(delegate):

_sftpClient.DownloadFile(ftpFile.FullName, fileBody, YourActionDelegateHere);

关于c# - 使用 SSH.Net 下载和返回非阻塞数据流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29816812/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com