2011-09-12 90 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