public void Imagesaver(string url)
{
string result = Filename(url);
string SourceCode = worker.GetSourceCode(url);
List<string> names1 = new List<string>();
MatchCollection data2 = Regex.Matches(SourceCode, "(src=\"|src=\\/\")([^>]*?jpg|png|gif)", RegexOptions.Singleline);
string name = string.Empty;
foreach (Match m in data2)
{
name = m.Groups[2].Value;
if (name.Contains("http"))
{
names1.Add(name);
}
else
{
names1.Add(url+name);
}
}
WebClient client = new WebClient();
int i = 0;
foreach (string name2 in names1)
{
Uri imageurl = new Uri(name2);
try
{
client.DownloadFileAsync(imageurl, (@"C:\Users\Ramazan BIYIK\Desktop\HTML içerik\" + result+"\\" + i + ".jpg"));
i++;
}
catch(Exception ex)
{
continue;
}
}
}
我有一个代码块,可以将.jpg
,.png
和.gif
个扩展文件从网站的源代码保存到本地。但是当我尝试调试和非调试模式时,它向我展示了不同的结果。
例如,在网站中有40个文件,其扩展名为.jpg
。在调试模式下,我可以下载它们,除了在运行时,我只能下载6个文件。
我搜索了这个问题,但所有的答案都是关于数字而我没有处理数字(我想)。请帮助,抱歉我的英语不好。
答案 0 :(得分:0)
感谢-Nuf解决了问题。请将您的推荐作为答案分享。 我跟着这个link。问题是,我只尝试了一个webclient实例。这就是我的问题的答案。
foreach (string name2 in names1)
{
WebClient client = new WebClient();
Uri imageurl = new Uri(name2);
try
{
client.DownloadFileAsync(imageurl, (@"C:\Users\Ramazan BIYIK\Desktop\HTML içerik\" + result+"\\" + i + ".jpg"));
i++;
}
catch(Exception ex) {continue; }
}
Hovewer使用异步方法并在某些情况下等待表达式可以工作(或者我以错误的方式使用它):
public async void Imagesaver(string url)
{
string result = Filename(url);
string SourceCode = worker.GetSourceCode(url);
List<string> names1 = new List<string>();
MatchCollection data2 = Regex.Matches(SourceCode, "(src=\"|src=\\/\")([^>]*?jpg|png|gif)", RegexOptions.Singleline);
string name = string.Empty;
foreach (Match m in data2)
{
name = m.Groups[2].Value;
if (name.Contains("http"))
{
names1.Add(name);
}
else
{
names1.Add(url+name);
}
}
int i = 0;
WebClient client = new WebClient();
foreach (string name2 in names1)
{
Uri imageurl = new Uri(name2);
try
{
await Task.Run(()=>client.DownloadFileAsync(imageurl, (@"C:\Users\Ramazan BIYIK\Desktop\HTML içerik\" + result+"\\" + i + ".jpg")));
i++;
}
catch(Exception ex) {continue; }
}
使用此代码块ı可以下载更多文件然后第一个代码块(我的问题中的代码块)。
结果ı只能下载只有一个webclient实例的6个文件。(代码块在我的问题中)。当ı使用异步方法时,ı可以下载18个文件。但当ı在foreach循环中使用实例时,ı可以下载所有文件(40个文件)。