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 6

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);
        }
    }
}