【WinForms基礎】ファイルが無いとアプリはなぜ落ちるのか

― 例外処理をやさしく理解する ―


■ まず起きていること

現在のコード:

new System.IO.StreamReader("data.txt")

もし data.txt が存在しないとどうなるでしょうか?

答え:

アプリが強制終了します。

これは「バグ」ではなく、

ファイルが見つからないという“異常事態”が発生している

という状態です。


■ 例外とは何か?

例外とは、

プログラムが通常通り続行できない状態

のことです。

今回の例では、

  • 読もうとした
  • でもファイルが無い
  • どうすればいいか分からない

だから止まります。


■ 例外をそのままにするとどうなる?

  • アプリが突然終了する
  • ユーザーは理由が分からない
  • 「壊れている」と思われる

これでは困ります。


■ 例外を受け止める方法

そこで使うのが

try
{
    // 危険かもしれない処理
}
catch
{
    // エラーが起きたときの処理
}

です。


■ 電話帳アプリへの適用例

private void ReadFromFile()
{
    try
    {
        using (System.IO.StreamReader file =
                new System.IO.StreamReader("data.txt"))
        {
            while (!file.EndOfStream)
            {
                string line = file.ReadLine();
                string[] data = line.Split(',');
                this.phoneBook.Add(data[0], data[1]);
            }
        }
    }
    catch
    {
        MessageBox.Show("データファイルが見つかりません。");
    }
}

■ 何が起きているか?

  1. まず try の中を実行する
  2. エラーが起きたら
  3. catch に移動する
  4. アプリは終了せずに続く

つまり、

「落ちる」のではなく

「エラーを受け止める」

ようになります。


■ さらに一歩だけ理解を深める

実は catch には情報を受け取る形もあります。

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

ex.Message には

「どんなエラーが起きたのか」

が入っています。

今は深く理解しなくても大丈夫です。


■ 例外処理の考え方

例外処理は、

転びそうになったときに手をつく仕組み

のようなものです。

転ばないようにするのではなく、

転んでも大けがをしないようにする。

それが try-catch です。


■ 今日の重要理解

  • ファイルが無いと例外が発生する
  • 例外は「異常事態」
  • try-catch で受け止められる
  • 受け止めればアプリは落ちない
訪問数 21 回, 今日の訪問数 21回

C#,例外

Posted by hidepon