내가 텍스트 파일에 저장된 여러 개의 URL이, 그들 각각은 내가 이러한 이미지를 다운로드하여 저장하기 위해 노력하고있어 https://www.facebook.com/images/emoji.php/v5/u75/1/16/1f618.png웹 클라이언트로 다운로드하기 전에 페이지가로드 될 때까지 기다립니다
같은 페이스 북의 이모티콘로 이어지는 링크입니다 내 디스크에. 좀 나에게 파일 손상 오류를주고, 10, 이미지의 일부가 확인 다운로드 말,
using (var client = new WebClient())
{
client.DownloadFileAsync(imgURL, imgName);
}
내 문제는 URL의 양이 작은 경우에도처럼, DownloadFileAsync 뭔가를 웹 클라이언트를 사용하고 있습니다. 그래서 나는 파일이 끝날 때까지 다운로드 할 때까지 기다릴 필요하다고 생각하고 그것은 도움이되지 않았다이
using System;
using System.ComponentModel;
using System.Collections.Generic;
using System.Linq;
using System.Net;
class Program
{
static Queue<string> q;
static void Main(string[] args)
{
q = new Queue<string>(new[] {
"https://www.facebook.com/images/emoji.php/v5/u51/1/16/1f603.png",
"https://www.facebook.com/images/emoji.php/v5/ud2/1/16/1f604.png",
"https://www.facebook.com/images/emoji.php/v5/ud4/1/16/1f606.png",
"https://www.facebook.com/images/emoji.php/v5/u57/1/16/1f609.png",
"https://www.facebook.com/images/emoji.php/v5/u7f/1/16/1f60a.png",
"https://www.facebook.com/images/emoji.php/v5/ufb/1/16/263a.png",
"https://www.facebook.com/images/emoji.php/v5/u81/1/16/1f60c.png",
"https://www.facebook.com/images/emoji.php/v5/u2/1/16/1f60d.png",
"https://www.facebook.com/images/emoji.php/v5/u75/1/16/1f618.png",
"https://www.facebook.com/images/emoji.php/v5/u1e/1/16/1f61a.png"
});
DownloadItem();
Console.WriteLine("Hit return after 'finished' has appeared...");
Console.ReadLine();
}
private static void DownloadItem()
{
if (q.Any())
{
var uri = new Uri(q.Dequeue());
var file = uri.Segments.Last();
var webClient = new WebClient();
webClient.DownloadFileCompleted += DownloadFileCompleted;
webClient.DownloadFileAsync(uri, file);
}
else
{
Console.WriteLine("finished");
}
}
private static void DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
{
DownloadItem();
}
}
처럼 DownloadFileCompleted 이벤트를 추가하고 난 손상된 파일에 자세히 살펴하기로 결정했다.
손상된 파일은 실제로 이미지 파일이 아닌 HTML 페이지로, 일부 리디렉션 JavaScript 코드가 이미지에 있거나 전체 HTML 페이지에서 내 브라우저가 지원되지 않는다고 나타났습니다.
내 질문은, 어떻게 실제로 이미지 파일이 완전히로드되어 다운로드 할 준비가 될 때까지 기다릴 수 있습니까?
EDIT 또한 using
문을 제거하려고했으나 도움이되지 않았습니다.
은 현재의 문제와 관련되지 않을 수 있습니다,하지만 당신은 비동기 프로세스를 발로 후 *의 *를 폐기하고
('using'문을 통해) 비동기 프로세스를 시작한 객체. 나는 당신이 실제로 끝날 때까지 당신의'WebClient'를'폐기 '하지 않도록 당신의 객체 관리를 개선하려고합니다. 여전히 기본적인 사항을 익히기 위해 노력하고 있지만, 지금은 비동기를 무시하는 것이 좋습니다. –@Damien_The_Unbeliever 비동기도없이 시도했지만 단 하나의 파일 만 다운로드합니다. using 문을 제거하는 것에 대해 - 도움이되지 않았 으면 아래의 내 의견을 참조하십시오. –
편집을 추가하는 것만으로도 이전에 요청한 [mcve]를 제공하는 것만 큼 유용하지는 않습니다. –