私はSpecFlow(下にNUnitを使用)の上に構築した統合/回帰テストスイートを持っています。私が抱えている問題は、テスト中に例外があり、ファイルが開いていることがあるということです。これは、このファイルを読み書きできないため、後続のテストで問題になります。C#で開いているファイルハンドルをすべて閉じます
プロセスが開いているファイルを検出し、それらをすべて閉じる方法はありますか?
私はSpecFlow(下にNUnitを使用)の上に構築した統合/回帰テストスイートを持っています。私が抱えている問題は、テスト中に例外があり、ファイルが開いていることがあるということです。これは、このファイルを読み書きできないため、後続のテストで問題になります。C#で開いているファイルハンドルをすべて閉じます
プロセスが開いているファイルを検出し、それらをすべて閉じる方法はありますか?
ハンドルを廃棄するか(using
句で最善)、ファイナライザを待つ必要があります。ファイナライザは、おそらく次のテストの前に実行されない可能性があるため、うまく機能しません。だからtry
... finally
またはusing
のいずれかでそれらを廃棄する方法です。
ハンドルを列挙して閉じても問題ありません。それ以来、ハンドルは2回閉じられ、未定義の動作やクラッシュが発生します。
ここでは、プロセスのすべてのハンドルを列挙するサンプルコードを示します。http://nopaste.info/58d1aed48f.htmlファイルハンドルのみにフィルタリングできます。
ありがとう、それは私が向かっていたもののようなものです。 –
nopaste.infoリンクが無効です。 – abhi
ファイルはusing
ブロックに置く必要があります。例外がスローされても閉じられるようにしてください。
私は文の使い方を知っていますが、通常はそれらを使用しますが、ブロックを使用すると意味がないことがあります。そのような場合、私は何をしますか? –
@ジェフリー:それは状況によって異なります。 – SLaks
うわー、あなたはファイルを開くことでそれを検出します。 IOExceptionが発生します。いいえ、別のプロセスが所有するファイルを閉じることはサポートされていません.Windowsは*誰でもファイルを混乱させないように要求しています。プロセスを停止します。 –