证明文件存在?也如何阻止你的程序冻结时,逃离网站

本文关键字:冻结 程序 网站 逃离 存在 文件 何阻止 证明 | 更新日期: 2023-09-27 18:05:45

嘿,我开始学习c#和html lagilitypack,到目前为止,我正在做一个小的测试项目。我遇到的一个问题是检查文件是否已经存在,以便不下载两次。

另一个问题是,在抓取网站/下载图像时,我的整个程序将冻结一段时间,然后再次成为功能,是否有办法解决这个问题?

if (!File.Exists(@"Res'" + pokeName + ".jpg"))
        {
            var item = doc.DocumentNode.SelectNodes("//a[@class='image']//img")[0];
            if (doc.DocumentNode.SelectNodes("//a[@class='image']//img") != null)
            {
                getImage(item.GetAttributeValue("src", ""));
                pictureBox1.Load(@"Res'" + pokeName + ".jpg");
            }
        }
        else
        {
            pictureBox1.Load(@"Res'" + pokeName + ".jpg");
        }

public void getImage(string url){

        string imageUrl = @""+ url;
        string saveLocation = @"Res'"+ pokeName + ".jpg";
        byte[] imageBytes;
        HttpWebRequest imageRequest = (HttpWebRequest)WebRequest.Create(imageUrl);
        WebResponse imageResponse = imageRequest.GetResponse();
        Stream responseStream = imageResponse.GetResponseStream();
        using (BinaryReader br = new BinaryReader(responseStream ))
        {
            imageBytes = br.ReadBytes(500000);
            br.Close();
        }
        responseStream.Close();
        imageResponse.Close();
        FileStream fs = new FileStream(saveLocation, FileMode.Create);
        BinaryWriter bw = new BinaryWriter(fs);
        try
        {
            bw.Write(imageBytes);
        }
        finally
        {
            fs.Close();
            bw.Close();
        }
    }

证明文件存在?也如何阻止你的程序冻结时,逃离网站

你的程序可能会冻结,因为UI线程上有长时间运行的项目。

你可能会考虑使用前面提到的后台worker,或者(如果你使用的是。net 4.5)新的async/await系统

GetStreamAsync非常适合这种情况,当您可能需要很长时间等待或需要处理大量项目而不是迭代获取它们时http://msdn.microsoft.com/en-gb/library/vstudio/hh551738.aspx

作为旁注,你放的代码如果我有3张图片{1.jpg, 2.jpg, foo/1.jpg}你不会得到第三张因为名字匹配第一张图片,还有更多的图像扩展名比jpeg/jpg:)