С# скачать большой файл с FTP

104
9

У меня есть FTP (Filezila server), и я хотел бы загрузить на него большой файл, используя С#.

 WebClient client = new WebClient();
client.Credentials = new NetworkCredential(userName, password);
client.DownloadFile(new Uri("ftp://XXX.XXX.XXX.XXX/" + fileName), destinationFileFullPath);

или же

 FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://XXX.XXX.XXX.XXX/" + fileName);
request.Method = WebRequestMethods.Ftp.DownloadFile;
request.KeepAlive = true; // I tried both
request.UseBinary = true; // I tried both
request.UsePassive = true;
request.Credentials = new NetworkCredential(userName, password);
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
Stream responseStream = response.GetResponseStream();

// Writing bytes to local files
using (var outputStream = File.OpenWrite(destinationFileFullPath))
{
byte[] chunk = new byte[2048];
int bytesRead;
do
{
bytesRead = responseStream.Read(chunk, 0, chunk.Length);
outputStream.Write(chunk, 0, bytesRead);
} while (bytesRead > 0);

outputStream.Flush();
}

responseStream.Close();
response.Close();

Для небольшого файла он работает хорошо, но для большого файла (по большому счету - около 300 МБ и более) он работает, но в конце передачи (я вижу на стороне сервера filezilla, что передача успешна) для неизвестного причина, по которой мое приложение просто зависает на линии

 client.DownloadFile(new Uri("ftp://XXX.XXX.XXX.XXX/" + fileName), destinationFileFullPath);

или же

bytesRead = responseStream.Read(chunk, 0, chunk.Length); 

пока я не получу исключение тайм-аута. Если я задержу разрыв (пауза), я вижу, что это действительно застряло на этой линии. Это похоже на то, что Filezilla закрывает соединение, а С# просто ждет больше, чтобы читать... Вы уже испытали эту проблему?

Спасибо за вашу помощь.

спросил(а) 2018-02-12T13:34:00+03:00 3 года назад
0
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема