掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
CSVの読み書きについて (ID:70694)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
まあいろんな考え方があるわけで、以下で述べてる内容が常に正しいわけではないが とりあえず考え方の1つとしては妥当な範囲だと思うので・・・ ・ユーザーの操作によって発生しうるエラー(プログラムの想定内の動き) ・本来、起こってはならない例外(端的に言えばプログラムのバグ) の2者は異なる、ということ。 ・ユーザーが指定したファイルを開くことに失敗した(権限がないとか) ・ファイルに対する書き込みに失敗した(ディスクがいっぱいとか) というのは、あらかじめ想定される範囲内なので「正しくエラーが起こる」のが動きとして適切。 そういう「エラーが起こることが正しい」時には例外を使うべきでない。 一方で、プログラムのバグとは ・書き込み処理中にぬるぽ発生 ・書き込み処理中に自分のプログラム中にてメモリ破壊発生 ・書き込み処理中にOS内部に矛盾発生 ・起こるはずのない0除算 などというのは、想定されない異常。こういう場合には例外を使うべし。 で、むやみに catch するな、というのは、 「例外というのは本来、回復不可能な異常が起きたときに使うものである」 という立場に立って考える場合の話。 そういう回復不可能な異常を、勝手に catch してもみ消してしまうとデバッグすらできないよ ということ。 ただ、世の中には考え方が違う人も団体もいて 「想定されたエラー処理の一環として例外を使う」とか 「回復不可能なエラーに対して例外を使わない」とか そういう仕様の異なるライブラリを使わざるを得ない場合に try/catch/throw が必要。 CStdioFile::WriteString の仕様書を見ると 「ディスクフル等のいくつかの状況に対して例外を投げます」 とあるので、こいつは「想定されたエラー処理の一環として例外を使う」という動きをする。 なので、今挙げているような設計方針のプロジェクトで CStdioFile を使うには TRY-CATCH (try/catch) が必須ということになる。 (どの層で try/catch すべきかはまた話のレベルが違う) (どの例外は catch してよくて、どの例外は rethrow しなければならないかも話が違う) CFileException のうち、一部は catch してエラーに変換する必要がある ほとんどの例外は catch せずに rethrow する必要がある ということだ。 どれを catch すべきかはスレ主の仕様しだい。 よくわからないのなら、こんな下のほうの処理で try/catch など書かないほうがいい。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.