【问题标题】:Image download null reference exception图片下载空引用异常
【发布时间】:2013-07-17 15:38:13
【问题描述】:

我正在尝试创建一个图像下载器。基本上它应该通过一个网站并下载所有图像。我得到的错误是在 foreach 循环的第一行,System.NullReferenceException

private void button1_Click(object sender, EventArgs e)
{
    WebBrowser browser = new WebBrowser();
    browser.DocumentCompleted += browser_DocumentCompleted;
    browser.Navigate("http://www.mysite.com");
}

void browser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    WebBrowser browser = sender as WebBrowser;
    HtmlElementCollection imgCollection = browser.Document.GetElementsByTagName("img");
    WebClient webClient = new WebClient();
    foreach (HtmlElement img in imgCollection)
    {
        string url = img.FirstChild.GetAttribute("src");
        webClient.DownloadFile(url, url.Substring(url.LastIndexOf('/')));
    }
}

【问题讨论】:

  • 使用调试器找出什么是空的。

标签: c# webclient


【解决方案1】:

改变这个:

img.FirstChild.GetAttribute("src");

到那个:

img.GetAttribute("src");

【讨论】:

  • 现在修复后我在下一行得到这个错误'System.Net.WebException'webClient.DownloadFile(url,url.Substring(url.LastIndexOf('/')));
  • 那么 url 中存储了什么?
  • 假设我把 google.com 作为 url,它应该下载主页上的图像
  • 嗯.. 好吧,可以说一个网站吗?它如何自动下载'/'之后的所有图像?
  • 根据您的代码,您有一个循环,该循环为根下的每个图像迭代网站:即:www.gooogle.com/mypic1.png、www.gooogle.com/mypic2.png等等根据示例,您的代码似乎会尝试从 www.google.com 下载 mypic1.png,然后 mypic2.png 这里有什么问题?
【解决方案2】:

<img> 元素没有子元素。

【讨论】:

    【解决方案3】:

    改一下

     string url = img.FirstChild.GetAttribute("src");
    

     string url = img.GetAttribute("src");
    

    因为 img 没有孩子。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-16
      • 1970-01-01
      • 2014-06-13
      相关资源
      最近更新 更多