2012-08-07 24 views
3

我知道一些類似的問題已經被問及如何使用WebClient下載文件。我可以單獨下載單個文件,但我想下載一系列文件。從1-6000個文件任何地方。我可以很好地將它們下載到我的當前目錄中,但是我很難根據它們從哪裏下載,將它們下載到不同的目錄中。在下載之前是否需要臨時更改當前工作目錄?C#下載一系列文件

稍微在同一主題上,我被困在如何驗證下載它們之前存在的文件。我不想浪費帶寬或磁盤空間與空文件..這是我到目前爲止有:

  for (int x = 1; x <= 6000; x++) 
      { 
       pbsscount = x.ToString(); 

       // Used for downloading file 
       string directoryName = textBox1.Text.ToString().Replace(":", "_"); 
       if (!Directory.Exists(textBox1.Text)) 

        Directory.CreateDirectory(directoryName.Substring(7)); 
       string wholePBSSurl = textBox1.Text + "/" + "pb" + pbsscount.PadLeft(6, '0') + ".png"; 

       // Used for saving file, file name in directory 
       string partPBSSurl = "pb" + pbsscount.PadLeft(6, '0') + ".png"; 

       Uri uri2 = new Uri(wholePBSSurl); 

       //if (fileExists(wholePBSSurl)) 
       //{ 

        // Initialize downloading info, grab progressbar info 
        WebClient webClient = new WebClient(); 
        webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed); 
        webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged); 

        // Save file to folder 
        //webClient.DownloadFileAsync(uri2, textBox1.Text + "/" + partPBSSurl); 
        webClient.DownloadFileAsync(uri2, partPBSSurl); 
       //} 
      } 

回答

0

沒有必要改變當前目錄。您已經在使用DownloadFileAsync的超載,它接受文件路徑作爲第二個參數。

只要確保partPBSSurl包含目標文件的完整路徑,包括目錄和文件名。

關於你避免如果文件不存在浪費時間的第二個問題,恰巧我問同樣的問題最近:

Fail Fast with WebClient

最後,我最近擴展Web客戶端,提供更簡單進度更改事件並允許更改超時。我在這裏提出的是代碼:

https://stackoverflow.com/a/9763976/141172

1

我需要只是下載它們之前臨時改變當前的工作目錄?

第二個參數可以是完整路徑@"C:\folder\file.png"。如果你對當前目錄的相對路徑沒有問題,只需將代碼更改爲webClient.DownloadFileAsync(uri2, directoryName + partPBSSurl);或更好地使用System.Path.Combine(directoryName, partPBSSurl)

確定你可以知道之前的大小如果服務器支持。見:How to get the file size from http headers

我不想浪費帶寬或磁盤空間與空文件。

我不會爲此擔心。性能下降可以忽略不計。

+0

謝謝,Path.Combine(directoryName,partPBSSurl)工作正常。 – Jerry 2012-08-07 14:25:05