2011-09-12 110 views
-3

保存圖像我有一個這樣的代碼:C#從圖片框

private void Load_Button_Click(object sender, EventArgs e) 
    { 
     OpenFileDialog dialog = new OpenFileDialog();    
     if (dialog.ShowDialog()==DialogResult.OK){ 
      MessageBox.Show(dialog.FileName,"My Application", MessageBoxButtons.OK,MessageBoxIcon.Asterisk); 
      string s; 
      s=".bmp"; 
      if (dialog.FileName.Substring(dialog.FileName.LastIndexOf('.')).Equals(s)) 
      { 
       picBox_1.Load(dialog.FileName); 
       BitmapFile = new Bitmap(dialog.FileName.ToString()); 
      } 
      else { 
       MessageBox.Show("Not a BMP file!"); 
      } 
     } 

    } 

所以,負載圖像。並在這裏有一個錯誤:

private void Save_Button_Click(object sender, EventArgs e) 
    { 
     SaveFileDialog dialog = new SaveFileDialog(); 
     try 
     { 
      if (picBox_1.Image != null) 
      { 
       if (dialog.ShowDialog() == DialogResult.OK) 
       { 
        MessageBox.Show(dialog.FileName, "My Application", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); 
        string s; 
        s = ".bmp"; 
        if (dialog.FileName.Substring(dialog.FileName.LastIndexOf('.')).Equals(s)) 
        { 

         picBox_1.Image.Save(dialog.FileName.ToString()); 
         //BitmapFile.Dispose(); 
        } 
        else 
        { 
         MessageBox.Show("Not a BMP file!"); 
        } 
       } 
      } 
      else 
      { 
       MessageBox.Show("My PicBox is empty!"); 
      } 
     } 
     catch (Exception) { MessageBox.Show("Cannot save file, error!"); } 

    } 

這是一般的GDI錯誤。我想,我不能寫入文件(也許沒有足夠的權限)。我怎樣才能改善這個錯誤?

+0

你不是要覆蓋源文件,是嗎? –

+0

請幫助清理混淆,通過_improve這個錯誤_,你的意思是_糾正這個錯誤_在_make它消失嗎?_我不知道任何人都可以解釋_improve這個錯誤_作爲_how看到這個error_或_how以改善處理這個錯誤_,但你有,有些是。 –

+0

什麼和哪裏**完全**是錯誤? – ChrisF

回答

0

你在吃東西,失去了所有多汁的細節。試着改變你的catch塊這樣的事情,看看發生了什麼事情。

catch (Exception ex) 
{ 
    MessageBox.Show(this, ex.ToString(), "Error Saving Image", MessageBoxIcons.Error); 
} 

此外,考慮實施一些記錄(在事件查看器和/或文本文件,這將讓你有一個簡單的消息框,但所有的多汁的細節放在某處有用的事件後取出。

catch (Exception ex) 
{ 
    MessageBox.Show(this, ex.Message, "Error Saving Image", MessageBoxIcon.Error); 

    // _logger is a private field on this class in this case. 
    _logger.Log(ex, string.Format("Saving image to {0}", dialog.Filename)) 
} 

你可以看看Log4net除其他事物的實際記錄,但至少是寫一個類來write exception detail to the event viewer

+0

_'this是一般的GDI錯誤。''這似乎是用戶_is_意識到異常,只是一個通用的GDI +錯誤,很好,非常通用,這裏的例外情況沒有問題。 –

1

你應該正確地捕捉異常,而不是使用MessageBox,它不會告訴你拋出的確切異常!

以最低的catch塊應該是這樣的:

catch (Exception exc) 
{ 
    MessageBox.Show(exc.Message); 
} 

和我最小說,因爲你其實應該記錄異常的地方,使用像NLOG或log4net的日誌框架和轉儲堆棧跟蹤和其他細節。如果您使用靜態字符串顯示消息而不顯示實際異常的詳細信息,則甚至無法告訴excact類型的Exception。

+0

_'this is general GDI error._'這似乎是用戶意識到異常,只是泛型GDI +錯誤,是非常通用的,這裏的異常沒有問題。 –

+0

是什麼?這是什麼意思?這個問題如何解釋? –

+0

就是這個意思,這個錯誤可能意味着任何數量的東西(無效的訪問權限,鎖定的文件,內存不足等等。)_'improve this error'_可以替換爲_'糾正這個錯誤',_我認爲。 –

1

您應該只捕獲您打算處理或從中恢復的特定異常,並記錄詳細信息。永遠不要捕獲Exception,因爲如果發生這種情況,您可能會屏蔽服務器的更大問題。

意外的異常應該冒泡,以便可以在發生原因時快速識別原因。

請參閱Best Practices for Handling Exceptions

+0

投票?真的嗎? – TheCodeKing

+0

是的,請參閱我對其他答案的評論 - 這不是目前的話題,也不能解決任何問題。 –

+0

好吧,我們不得不不同意這一點,你的應用中顯然會出現很多GDI錯誤。 – TheCodeKing