В настоящее время я создаю приложение, которое, помимо прочего, собирается загружать большие файлы с FTP-сервера. Все отлично работает для небольших файлов (<50 МБ), но загружаемые файлы намного больше, в основном более 2 ГБ. </p>
Я пытался с веб-клиентом использовать DownloadfileAsync () и систему списков, так как я загружаю эти файлы один за другим из-за их размеров.
DownloadClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(DownloadProgress);
DownloadClient.DownloadFileCompleted += new AsyncCompletedEventHandler(DownloadCompleted);
private void FileDownload()
{
DownloadClient.DownloadFileAsync(new Uri(@"ftp://" + RemoteAddress + FilesToDownload[0]), LocalDirectory + FilesToDownload[0]));
}
private void DownloadProgress(object sender, DownloadProgressChangedEventArgs e)
{
// Handle progress
}
private void DownloadCompleted(object sender, AsyncCompletedEventArgs e)
{
FilesToDownload.RemoveAt(0);
FileDownload();
}
С маленькими файлами это работает абсолютно нормально, все они загружаются один за другим, о прогрессе сообщается и после каждого файла запускается DownloadCompleted
. Эта проблема, с которой я сталкиваюсь с большими файлами, состоит в том, что она запускает первую загрузку без каких-либо проблем, но ничего не делает после этого. Событие DownloadCompleted
никогда не срабатывает по некоторым причинам. Похоже, WebClient
не знает, что файл завершил загрузку, что является проблемой, поскольку я использую это событие для запуска следующей загрузки в списке FilesToDownload.
Я также пытался сделать это синхронно, используя WebClient.DownloadFile
и цикл for
для циклического просмотра моего списка FilesToDownload
. Он правильно загружает первый файл, и я получаю исключение, когда должна начаться вторая загрузка: «Базовое соединение было закрыто: при получении произошла непредвиденная ошибка».
Наконец, я попытался пройти через FTP, используя edtFTPnet , но у меня возникают проблемы со скоростью загрузки (т.е. моя загрузка идет на полной скорости с WebClient
, и я просто получаю 1/3 полной скорости с библиотекой edtFTPnet).
Есть мысли? Я должен признать, что у меня заканчиваются идеи здесь.