2011-06-19 24 views
0

我遇到了一些問題,使用C#WebClient DownloadFileAsync,並希望你能幫助我。DownloadFileAsync:多個文件

這裏是我的情況:

我下載多個文件同時採用Web客戶端DownloadFileAsync同一時間(http://example.com/abc/1.jpg,http://example.com/abc/efg/2.jpg等)。

我當前的示例代碼:

while (theres still files in http://example.com/abc/) { 
    // filename will be something like /abc/1.jpg, /abc/efg/2.jpg 
    if (!file.exists(directory.getcurrentdirectory()+filename.Replace('/', '\\'))) { 
     WebClient webClient = new WebClient(); 
     webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(downloadProgressChanged); 
     webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(downloadCompleted); 
     webClient.DownloadFileAsync(new Uri("http://example.com"+filename), Directory.GetCurrentDirectory()+filename.Replace('/', '\\')); 
    } 

如何讓這個所有的文件被下載在一個顯示進度條?

例如。 1.jpg爲50kb,2.jpg爲50kb,1.jpg完成下載時進度條會顯示50%,並且進度條中的2.jpg會從51%到100%。

另外,如果文件名是/abc/1.jpg,如果我的當前目錄沒有名爲abc的文件夾,則下載將不起作用。如何根據文件名自動創建文件夾? (例如/random123/3.jpg,/anotherrandom/4.jpg等)

+0

你在問兩個不相關的東西,你應該問兩個問題。 – svick

+0

在開始下載之前,你知道所有圖像的大小嗎?還是應該進度條獨立於圖像的大小? – svick

+0

在開始下載之前,我不知道所有圖像的總大小。它應該是動態的。 – initialshl

回答

0

爲了給你一個總體進度計數器,你需要一個集中式的例程,它收集已完成的數量和總數,對每個正在進行的轉賬進行下載金額並將它們相加以計算總計。由於傳輸並行運行,因此您不能只將進度條塊(例如51-100%)分配給每個文件。

對於大多數API,在將文件寫入文件之前,您需要爲自己創建文件夾。只需要在開始寫入文件之前創建路徑上所有丟失的文件夾:

Directory.CreateDirectory(Path.GetDirectoryName(filename)); 
+0

謝謝!目錄創建現在可行!有什麼方法可以收集所有將要下載的文件的總大小,並自己計算出百分比,並將其合併到一個進度條中? – initialshl

+0

您可以幫助我完成下載文件的完成數量嗎?我能夠從PHP下載文件的總大小,但我不知道如何計算進度條。 – initialshl

0

要做進度條的事情,您可以使用隊列。下載完成後,更新進度條並開始下一次下載。 但是,我不認爲WebClient類可以告訴你有多少下載完成,只有當它完成或沒有完成。

要驗證是否該目錄存在,使用方法:

if (!System.IO.Directory.Exists(folder_name)) System.IO.Directory.Create(folder_name); 

可以從路徑獲取目錄中,使用System.IO.Path類。