Visual C++ 2008 Express Editionでアプリを作る(その4)

今日のプログラミングは30分。設定ファイルの保存と読み込み部分を完成させた。
設定ファイルの保存メソッドは、WriteLineを使う変更を行った。

// 設定ファイルへ保存する
void gdcConf::WriteFile(void)
{
//    String^ data = this->Radiobutton_number + "\n" + this->UsrSavePath + "\n";
    System::IO::StreamWriter^ writer = gcnew System::IO::StreamWriter(CONF_FILE_PATH, false);
//    writer->Write(data);
    writer->WriteLine(this->Radiobutton_number);
    writer->WriteLine(this->UsrSavePath);
    writer->Close();
}

読み込みもメソッドを作るべきなんだろうけど、いらないのでコンストラクタの中で実装してしまった。教科書的に書くなら、読み込み関数で作っておくべきだ。

gdcConf::gdcConf(void)
{
    // 設定ファイルから読み込む
    try {
        System::IO::StreamReader^ reader = gcnew System::IO::StreamReader(CONF_FILE_PATH);
        if (reader->EndOfStream == false) {
            // 中身がある
            this->Radiobutton_number = int::Parse(reader->ReadLine());
            this->UsrSavePath = reader->ReadLine();
        } else {
            // 中身がない
            reader->Close();
            // 横着しすぎ
            throw gcnew System::IO::FileNotFoundException("ファイルの中身がないよ");
        }
        reader->Close();
    } catch(System::IO::FileNotFoundException^ ex) {
        // ファイルが無いので新規作成
        System::IO::File::AppendAllText(CONF_FILE_PATH, DEFAULT_CONF);
    } catch(Exception ^ex) {
        // 本当は必要ない。
        System::Diagnostics::Debug::WriteLine("全ての例外");
    }
}

ファイルはあったけど、中身が無いときにFileNotFound例外をthrowしているのは自分でも横着しすぎだと思う。本質的にgotoだし。でも、楽だよねぇ〜。あと、行を決め打ちで設定内容を読み込んでるのもイクナイ。