C# Webclient Stream загрузка файла с FTP в локальное хранилище
Я загружал файлы с FTP-сервера через объект WebClient
, который предоставляет пространство имен .NET
, а затем записывал байты в реальный файл через BinaryWriter
. Все это хорошо. Однако теперь файлы резко увеличились в размере, и я беспокоюсь об ограничениях памяти, поэтому я хотел бы создать поток загрузки, создать поток файлов и строку за строкой читать из загрузки и записывать в файл.
Я нервничаю, так как не могу найти хороший пример этого. Вот мой конец. результат:
var request = new WebClient();
// Omitted code to add credentials, etc..
var downloadStream = new StreamReader(request.OpenRead(ftpFilePathUri.ToString()));
using (var writeStream = File.Open(toLocation, FileMode.CreateNew))
{
using (var writer = new StreamWriter(writeStream))
{
while (!downloadStream.EndOfStream)
{
writer.Write(downloadStream.ReadLine());
}
}
}
Я иду по этому неверному / лучшему пути/и т. д.?
1 ответ:
Пробовали ли вы следующее использование класса
WebClient
?using (WebClient webClient = new WebClient()) { webClient.DownloadFile("url", "filePath"); }
Обновить
using (var client = new WebClient()) using (var stream = client.OpenRead("...")) using (var file = File.Create("...")) { stream.CopyTo(file); }
Если вы хотите загрузить файл явно с помощью настраиваемого размера буфера:
public static void DownloadFile(Uri address, string filePath) { using (var client = new WebClient()) using (var stream = client.OpenRead(address)) using (var file = File.Create(filePath)) { var buffer = new byte[4096]; int bytesReceived; while ((bytesReceived = stream.Read(buffer, 0, buffer.Length)) != 0) { file.Write(buffer, 0, bytesReceived); } } }