Я использую библиотеку ssh.net для выполнения операций SFTP для работы с большими файлами данных (>= 500 МБ)
У меня возникла проблема с возвратом данных неблокирующим способом.
Сигнатура метода ftpClient.DownloadFile()
в порядке при записи в файл или если есть какой-то способ создать экземпляр потока, но у меня возникают проблемы с тем, как его использовать, когда я хочу вернуть поток без блокировки.
Все примеры, которые я видел до сих пор, будут записывать загрузку в файл Filestream
. Ничего, что просто возвращает поток
Со встроенным FTP .Net вы просто используете 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
), который будет работать с большими файлами?