2011-01-20 18 views
2

私はSpecFlow(下にNUnitを使用)の上に構築した統合/回帰テストスイートを持っています。私が抱えている問題は、テスト中に例外があり、ファイルが開いていることがあるということです。これは、このファイルを読み書きできないため、後続のテストで問題になります。C#で開いているファイルハンドルをすべて閉じます

プロセスが開いているファイルを検出し、それらをすべて閉じる方法はありますか?

+0

うわー、あなたはファイルを開くことでそれを検出します。 IOExceptionが発生します。いいえ、別のプロセスが所有するファイルを閉じることはサポートされていません.Windowsは*誰でもファイルを混乱させないように要求しています。プロセスを停止します。 –

答えて

1

ハンドルを廃棄するか(using句で最善)、ファイナライザを待つ必要があります。ファイナライザは、おそらく次のテストの前に実行されない可能性があるため、うまく機能しません。だからtry ... finallyまたはusingのいずれかでそれらを廃棄する方法です。

ハンドルを列挙して閉じても問題ありません。それ以来、ハンドルは2回閉じられ、未定義の動作やクラッシュが発生します。

ここでは、プロセスのすべてのハンドルを列挙するサンプルコードを示します。http://nopaste.info/58d1aed48f.htmlファイルハンドルのみにフィルタリングできます。

+0

ありがとう、それは私が向かっていたもののようなものです。 –

+0

nopaste.infoリンクが無効です。 – abhi

4

ファイルはusingブロックに置く必要があります。例外がスローされても閉じられるようにしてください。

+0

私は文の使い方を知っていますが、通常はそれらを使用しますが、ブロックを使用すると意味がないことがあります。そのような場合、私は何をしますか? –

+1

@ジェフリー:それは状況によって異なります。 – SLaks

関連する問題