我目前正在構建一個應用程序,其中包括從FTP服務器下載大文件。一切工作正常的小文件(< 50 MB),但我下載的文件是更大的方式,主要超過2 GB。通過WebClient/FTP下載大文件問題
我一直在使用一個使用DownloadfileAsync()和一個列表系統的Webclient,因爲我一個接一個地下載這些文件,因爲它們的大小。
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
列表。它會正確下載第一個文件,並在第二次下載應該開始時出現異常:「底層連接已關閉:接收時出現意外錯誤」。
最後,我試圖通過使用edtFTPnet通過FTP來通過這個,但我面臨下載速度問題(即我的下載全速與WebClient
,我只獲得全速的1/3與edtFTPnet庫)。
有什麼想法?我不得不承認,我在這裏沒有想法。
嘗試創建一個文件流或一個MemoryStream通過獲取字節和當你說「大」時做什麼,你參照GIGS或MB的大的定義是什麼 – MethodMan
我的大文件超過2演出。 – Xeaz
記得操作系統處理2 gig的文件大小,但4 gig限制是如果您使用.NET 4.0 Microsoft更改了.NET 4.0中的文件大小限制,所以您將不得不更改您的int大小爲多頭或Int64類型可以粘貼你正在使用的確切例子..數據的演出總是需要更長的時間。記住交換文件和tmp文件,它不只是一個直接的副本,你必須有目標媒體上的可用存儲空間 – MethodMan