2017-02-14 7 views
0

여러 링크가 있으며 시작 버튼을 누르면 모든 링크를 처리하려고합니다. 링크 중 하나가 404를 반환하면 건너 뛰고 다음 페이지로 이동하려고합니다.404가 발생할 때 for 루프가 멈추는 것을 방지하는 방법은 무엇입니까?

try 
      { 
       foreach (string s in txtInstagramUrls.Lines) 
       { 
        if (s.Contains("something")) 
        { 
         using (WebClient wc = new WebClient()) 
         { 
          Match m = Regex.Match(wc.DownloadString(s), "(?<=og:image\" content=\")(.*)(?=\" />)", RegexOptions.IgnoreCase); 
          if (m.Success) 
          { 
           txtConvertedUrls.Text += m.Groups[1].Value + Environment.NewLine; 
          } 
         } 
        } 
       } 
      } 
      catch(WebException we) 
      { 
       if(we.Status == WebExceptionStatus.ProtocolError && we.Response != null) 
       { 
        var resp = (HttpWebResponse)we.Response; 
        if (resp.StatusCode == HttpStatusCode.NotFound) 
        { 
         continue; 
        } 
       } 
       throw; 
      } 

오류가 continue;No enclosing loop out of which to break or continue 말에 보여줍니다

내 현재 코드는 다음과 같습니다. 나는 여기서 어떻게 나아갈 지 모르겠다. 어떤 도움을 주셔서 감사합니다.

답변

3

예외가 발생하면 foreach 블록을 이미 남겨 두었으므로 continue을 시도하고 있지만 그 시점에서 계속 진행할 루프가 없기 때문입니다. 여기에 귀하의 코드는이 보여 단순화 :

foreach(string s in txtInstagramUrls.Lines) { 
    try { 
     // do something 
    } 
    catch(WebException we) { 
     continue; 
     throw; 
    } 
} 

그래서 당신이 다음에 코드를 변경해야합니다 :

foreach(string s in txtInstagramUrls.Lines) { 
    try { 
     if(s.Contains("something")) { 
     using(WebClient wc = new WebClient()) { 
      Match m = Regex.Match(wc.DownloadString(s), "(?<=og:image\" content=\")(.*)(?=\" />)", RegexOptions.IgnoreCase); 
      if(m.Success) { 
       txtConvertedUrls.Text += m.Groups[ 1 ].Value + Environment.NewLine; 
      } 
     } 
     } 
    } 
    catch(WebException we) { 
     if(we.Status == WebExceptionStatus.ProtocolError && we.Response != null) { 
     var resp = (HttpWebResponse) we.Response; 
     if(resp.StatusCode == HttpStatusCode.NotFound) { 
      continue; 
     } 
     } 
     throw; 
    } 

} 

try { 
    foreach(string s in txtInstagramUrls.Lines) { 

    } 
} 
catch(WebException we) { 
    // There is no loop here to continue 
} 

당신은 루프 내부의 시도를 둘 필요가