2012-02-15 174 views
-4

這是我寫的代碼,但它不起作用。我不知道如何解決它。我希望你能幫助我。我出出主意:(你是我唯一的希望。將文件保存到文件夾

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

請解釋它不起作用的方式。不編譯?你有錯誤信息嗎?等 – 2012-02-15 22:42:03

+0

名稱'目的地'不存在於當前上下文 – docxx 2012-02-15 22:43:32

+0

然後聲明它 – 2012-02-15 22:47:08

回答

2

它看起來像您使用的是所謂的目標變量在這條線

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

但是你還沒有宣佈,可變的,並且它是buttonStart_Click方法中的一個值

您在buttonSaveTo_Click方法中聲明瞭一個名爲destination的變量,如果這是您在buttonStart_Click中要使用的值,則需要將其設置爲類級別字段,以便在其旁邊聲明它'布旗'

e.g:

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這裏:

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

但它是在另一個範圍(功能)聲明。具體而言,它在buttonSaveTo_Click()中聲明。

int downloadedNumber = 0; 
string destination; 

那麼,在年底改線:

你可以在頂部像這樣int downloadedNumber = 0;下宣佈它

destination = fbd.SelectedPath; 

我不能保證,這將完全解決您的代碼,但它會使destination在您嘗試使用它的兩個地方可用。