closeの話

closeで起きる例外について。正解は、昨日の記事のコメントの名無しさんの解答待ちですが、私の考え方を簡単に。
プログラム中で例外が起こったときに、できることはそのプログラムの処理を続行するために必要なリカバリ処置とログの記録の2つだと考えています。
ファイルの読み込みでは、必要なデータが読み込みに成功したあとにclose処理を行ったとき、closeで例外が発生した場合、プログラムの処理の続行に必要な情報はすでに得られているので、リカバリの必要はないと思います。closeの失敗でなんらかのリソースリークが起こっている可能性がありますが、それを検知して回復する方法は思い付きません。
ファイルの書き込みではもう少し考えることがあります。書き込み処理でバッファリングが行われている場合、close処理のところまで実際の書き込みが延期されている場合があり、その場合にはcloseから重要な例外が発生する可能性があります。しかし、finallyの中で重要な例外が発生するというのはプログラムの記述の上であまり扱いやすいことではないので、明示的にflushを呼んでおくことでcloseの中で書き込み処理が起こらないようにします。
close処理に失敗した場合、close中で書き込み処理がなくても、後からそのファイルを読み込む時になにか問題が残っているかもしれませんが、読み込みのときと同じく、それを検知して回復する方法は思い付きません。その問題は、次回のファイル読み込みの際に何か問題が起きたときに処理するということにしています。
一般的に言って、closeで重要な例外を発生させるようなことはしないほうがよいのではないかと思います。closeに失敗しても、プログラムの続行に重要な影響を与えることがないように、ライブラリを作っておくべきではないかと。そうでないと、try-catch-finallyの構文にあてはめたときに、きれいにまとめることが難しいと思います。