今日メンタルブロックを持っているので、私の論理が混乱していないことを確認する手が必要です。
従来、私は次のようなファイルI/Oを実行していました。
FileStream fs = null; // So it's visible in the finally block
try
{
fs = File.Open("Foo.txt", FileMode.Open);
/// Do Stuff
}
catch(IOException)
{
/// Handle Stuff
}
finally
{
if (fs != null)
fs.Close();
}
ただし、これはあまりエレガントではありません。
理想的には、using
ブロックを使用してファイルストリームを破棄したいのですが、使用とtry/catchの相乗効果についてはよくわかりません。
これが私が上記を実装したい方法です:
try
{
using(FileStream fs = File.Open("Foo.txt", FileMode.Open))
{
/// Do Stuff
}
}
catch(Exception)
{
/// Handle Stuff
}
ただし、usingブロック内からの(スローされた例外による)時期尚早な終了では、usingブロックが実行を完了してそのオブジェクトをクリーンアップできない可能性があるのではないかと心配しています。私はただの妄想ですか、それともこれは実際に私が意図したとおりに機能しますか?