次のコードスニペットに出くわしました。罪のない人を保護するために名前が変更されました:
public void RunProgram()
{
System.IO.FileInfo fInfo = new System.IO.FileInfo(Application.StartupPath + "Program.exe");
if (!fInfo.Exists)
{
System.Windows.Forms.MessageBox.Show("Program could not be found, please verify your installation.\n\nDetails:\n" + fInfo.FullName);
return;
}
try
{
System.Diagnostics.Process process = new System.Diagnostics.Process();
System.Diagnostics.ProcessStartInfo pStart = new System.Diagnostics.ProcessStartInfo();
pStart.FileName = fInfo.FullName;
pStart.UseShellExecute = true;
process.StartInfo = pStart;
process.Start();
}
catch
{
System.Windows.Forms.MessageBox.Show(string.Format("An error occurred trying to run the program:{0}", fInfo.FullName));
}
}
私はここでいくつか間違っていることを知っています:
- 例外タイプは個別に処理されていません
- エラーメッセージは十分な情報ではありません
これらについても説明しますが、私の主な質問は、try/catchブロックの直前にあるファイルの存在を確認することです。これは少し冗長だと思います。
例外処理のポイントは、予期しない状態をキャッチすることです。私はファイルがそこにあることを完全に期待しているので、存在チェックを削除し、それが私にとって合理的な解決策ではない場合は、例外処理にそれをキャッチさせます。
どう思いますか?