处理文件和图像加载异常的最佳方法是什么?

时间:2012-03-20 08:23:11

标签: c++ exception file-io exception-handling error-handling

除了没有解决方案或替代方案,例如无法打开图像之外,我通常会执行以下操作:

try
{
    img.load_from_file("my_image.png");
}
catch( const image_loading_exception& e )
{
    /* Could Not Load Image: 'my_image.png' ! */
    string err = "Could Not Load Image: " + e.what() + " !"; // 
    pro::message_box::show( err );
}

现在,这是非常好的错误处理吗?我应该做一些更具描述性的事情,还是尝试解决问题。在处理图像或文件加载失败时,我唯一能够想到的是显示错误消息框。你们做什么?

2 个答案:

答案 0 :(得分:4)

这取决于要求:

  • 如果程序由于缺少关键图像而无法继续,那么它应该停止执行并通知用户发生了什么
  • 如果用户输入了错误的参数(例如,错误的文件名),则应通知他们并要求他们再次输入
  • 如果它根本不重要,那么只需记录消息而不通知用户

答案 1 :(得分:2)

你应该做的很大程度上取决于具体情况。

如果此类代码放在处理程序中,例如“文件”|“打开”菜单选项,您打开图像文件,那么它似乎可以接受。

另一方面,如果它被放置在一些皮肤内部深处,适合您的应用,那么很可能这很糟糕。首先,您不知道何时执行此操作以及消息框是否合适。你不知道这次执行的频率(如果这是100张图片中的一张然后显示100个消息框不好......)。在致命的情况下,这可能导致死循环,如果以某种方式显示消息框(或由用户解雇)将导致再次执行此代码。

因此,除非您提供背景信息,否则很难提供合理有用的答案。


另请注意,除非您知道load_from_file的详细信息或其image_loading_exception内容向用户显示what()的内容并不是一个好主意。该字符串很可能是技术信息(或可能)对用户来说无用且不易理解。 (另一方面,如果这只是你或其他程序员的工具应用程序那么它可以接受 - 再次上下文!)

除非你知道image_loading_exception会在其what()中执行此操作,否则您可以考虑捕获典型案例(丢失文件,拒绝访问,空文件,损坏文件......)并显示专用(“面向用户的“)消息可能会将what()默认隐藏或隐藏在某处。