今日のプログラミングは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だし。でも、楽だよねぇ〜。あと、行を決め打ちで設定内容を読み込んでるのもイクナイ。