2013-08-25 76 views
0

代碼:爲什麼從網站上下載圖片即時獲得異常:WebClient請求期間發生異常?

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using HtmlAgilityPack; 
using System.IO; 
using System.Text.RegularExpressions; 
using System.Xml.Linq; 
using System.Net; 
using System.Web; 
using System.Threading; 
using DannyGeneral; 
using GatherLinks; 

namespace GatherLinks 
{ 
    class RetrieveWebContent 
    { 
     HtmlAgilityPack.HtmlDocument doc; 
     string imgg; 
     int images; 

     public RetrieveWebContent() 
     { 
      images = 0; 
     } 

     public List<string> retrieveImages(string address) 
     { 
      try 
      { 
       doc = new HtmlAgilityPack.HtmlDocument(); 
       System.Net.WebClient wc = new System.Net.WebClient(); 
       List<string> imgList = new List<string>(); 
       doc.Load(wc.OpenRead(address)); 
       HtmlNodeCollection imgs = doc.DocumentNode.SelectNodes("//img[@src]"); 
       if (imgs == null) return new List<string>(); 

       foreach (HtmlNode img in imgs) 
       { 
        if (img.Attributes["src"] == null) 
         continue; 
        HtmlAttribute src = img.Attributes["src"]; 

        imgList.Add(src.Value); 
        if (src.Value.StartsWith("http") || src.Value.StartsWith("https") || src.Value.StartsWith("www")) 
        { 
         images++; 
         string[] arr = src.Value.Split('/'); 
         imgg = arr[arr.Length - 1]; 
         wc.DownloadFile(src.Value, @"d:\MyImages\" + imgg); 
        } 
       } 

       return imgList; 
      } 
      catch 
      { 
       Logger.Write("There Was Problem Downloading The Image: " + imgg); 
       return null; 

      } 
     } 
    } 
} 

鏈接,例如,讓這個異常:

http://vanessawest.tripod.com/bundybowman.jpg

其進入一些itertions其跳躍到抓後foreach循環。

現在,如果鏈接是從其他網站,例如:

www.walla.co.il

因此,有沒有什麼問題了進入foreach循環並獲得所有圖像。

這是該鏈接的完整異常消息:

http://vanessawest.tripod.com/bundybowman.jpg

System.Net.WebException was caught 
    HResult=-2146233079 
    Message=An exception occurred during a WebClient request. 
    Source=System 
    StackTrace: 
     at System.Net.WebClient.DownloadFile(Uri address, String fileName) 
     at System.Net.WebClient.DownloadFile(String address, String fileName) 
     at GatherLinks.RetrieveWebContent.retrieveImages(String address) in d:\C-Sharp\GatherLinks\GatherLinks-2\GatherLinks\GatherLinks\RetrieveWebContent.cs:line 55 
    InnerException: System.ArgumentException 
     HResult=-2147024809 
     Message=Illegal characters in path. 
     Source=mscorlib 
     StackTrace: 
      at System.IO.Path.CheckInvalidPathChars(String path, Boolean checkAdditional) 
      at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) 
      at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access) 
      at System.Net.WebClient.DownloadFile(Uri address, String fileName) 
     InnerException: 

我不知道爲什麼在沃拉鍊接的工作沒有問題,三腳架的製作例外。

+1

你說的例外 「在路徑消息=非法字符」。你在src.value中傳遞的價值是什麼? – Haedrian

+0

在foreach循環中的第一個迭代中看不到的鏈接中的src.Value:http://ly.lygo.com/ly/tpSite/images/freeAd2.jpg在第二個迭代中,我看到一個鏈接這次做出例外src.Value是:http://members.tripod.com/adm/img/common/ot_noscript.gif?rand=932322這個鏈接製作三腳架之一。 – DanielVest

回答

0

http://vanessawest.tripod.com/bundybowman.jpg

你確定那是一個造成問題?我的猜測是你的本地文件名中有一些不需要的字符,因爲你的字符串拆分邏輯會得到文件名。

string[] arr = src.Value.Split('/'); 
imgg = arr[arr.Length - 1]; 

相反,試試這個:

imgg = Path.GetFileName(new Uri(src.Value).LocalPath); 
相關問題