2012-02-15 4 views
-4

여기에 내가 작성한 코드가 있지만 작동하지 않습니다. 나는 그것을 고치는 법을 모른다. 네가 나를 도울 수 있기를 바랍니다. 나는 밖으로 아이디어입니다 :(당신은 나의 유일한 희망입니다. 당신이 그 변수 선언과 할당되지 않은 그러나이 줄폴더에 파일 저장 중

webClient.DownloadFile("http://i.imgur.com/" + picture, destination + picture); 

에 목적지라는 변수를 사용하는 것처럼

namespace Imgur 
{ 
public partial class Form1 : Form 
{ 
    bool flag = true; 
    int downloadedNumber = 0; 

    public Form1() 
    { 
     InitializeComponent(); 
    } 

    public void buttonStart_Click(object sender, EventArgs e) 
    { 
     buttonStart.Enabled = false; 
     buttonStop.Enabled = true; 
     if (!flag) 
     { 
      flag = true; 
     } 

     for (int i=0;i<100000 && flag;i++) 
     { 
      WebClient webClient = new WebClient(); 
      string pic1 = rnd_str(5); 
      string pic2 = ".jpg"; 
      string picture = pic1 + pic2; 

      //********** GETTING SIZE OF IMAGE *********** 
      Size sz = GetSize("http://i.imgur.com/" + picture); 
      string imageSize = (sz.Width.ToString() + " " + sz.Height.ToString()); ; 
      //******************************************** 

      if(imageSize != "161 81") 
      { 
       webClient.DownloadFile("http://i.imgur.com/" + picture, destination + picture); 

       richTextBox1.Text += String.Format("Downloaded picture: {0}\r\n", picture); 
       downloadedNumber++; 
       textBoxDownloadedNumber.Text = string.Format("{0}", downloadedNumber); 
      } 
      webClient.Dispose(); 
      Application.DoEvents(); 
      if (i == 999995) 
      { 
       flag = false; 
      } 
     } 
     richTextBox1.Text += "theend\n"; 
     buttonStart.Enabled = true; 
     buttonStop.Enabled = false; 
    } 

    public static Size GetSize(string url) 
    { 
     HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); 
     request.Method = "GET"; 
     request.Accept = "image/gif"; 
     HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
     Stream s = response.GetResponseStream(); 
     Bitmap bmp = new Bitmap(s); 
     Size sz = new Size(bmp.Width, bmp.Height); 
     return sz; 
    } 

    public static string rnd_str(int liczba_liter) 
    { 
     Random r = new Random(); 
     int char_type; 
     string return_string = ""; 
     int i =0; 
     for (i = 0; i < liczba_liter; i++) 
     { 
      if (r.Next(1, 3) == 1) 
      { 
       char_type = r.Next(1, 4); 
       switch (char_type) 
       { 
        case 1: 
         return_string += (char)r.Next(48, 58); // convertion int -> ASCII character; 48-57 are ASCII digits 
         break; 
        case 2: 
         return_string += (char)r.Next(97, 123); // convertion int -> ASCII character; as above but small letters 
         break; 
        case 3: 
         return_string += (char)r.Next(65, 91); // as above; large letters 
         break; 
        default: 
         i -= 1; 
         break;//do not add any letter if no type is allowed 
       } 
      } 
      else 
      { 
       i -= 1; 
       return_string += ""; 
      } 
     } 
     return return_string; 
    } 

    private void buttonStop_Click(object sender, EventArgs e) 
    { 
     flag = false; 
     buttonStart.Enabled = true; 
    } 

    public void buttonSaveTo_Click(object sender, EventArgs e) 
    { 
     FolderBrowserDialog fbd = new FolderBrowserDialog(); 
     fbd.ShowDialog(); 
     richTextBox1.Text = fbd.SelectedPath; 
     string destination = fbd.SelectedPath; 
    } 
} 
} 
+1

작동하지 않는 방법으로 설명해주십시오. 컴파일되지 않습니까? 오류 메시지가 나타 납니까? etc. –

+0

'destination'이라는 이름은 currentcontext에 존재하지 않습니다 – docxx

+0

다음을 선언하십시오 –

답변

2

것 같습니다 buttonStart_Click 메서드 내부의 값

buttonSaveTo_Click 메서드에서 선언 된 대상 변수가 buttonStart_Click에 사용하려는 값이면 클래스 수준 필드로 지정해야 옆에 선언해야합니다. 'bool flag'

예컨대

:

webClient.DownloadFile("http://i.imgur.com/" + picture, destination + picture); 

을하지만 다른 범위 (기능)에 선언한다 :

public partial class Form1 : Form 
{ 
    bool flag = true; 
    int downloadedNumber = 0; 
    string destination; 
} 

public void buttonSaveTo_Click(object sender, EventArgs e) 
{ 
    FolderBrowserDialog fbd = new FolderBrowserDialog(); 
    fbd.ShowDialog(); 
    richTextBox1.Text = fbd.SelectedPath; 
    destination = fbd.SelectedPath; 
} 
0

에서 문자열 선언을 제거 여기 destination 사용합니다. 특히 에 선언되어 있습니다.

destination = fbd.SelectedPath; 

나는 전적으로 당신의 코드를 수정합니다이 약속 할 수는 없지만 :

int downloadedNumber = 0; 
string destination; 

그런 다음에 마지막에 줄을 변경 :

이 같은 상단에 int downloadedNumber = 0; 아래를 선언 할 수 그것을 사용하려고하는 두 곳에서 destination을 사용할 수 있습니다.

관련 문제