質問
ファイルがロックされた状態のままになるエラーケースから回復する必要があります。C# でこのファイルにロックをリセットするように指示するにはどうすればよいですか?これに、ファイルはサードパーティの DLL によって開かれており、実際にはファイルハンドルにアクセスできないことを追加する必要があります。
解決
netまたはpsfileのようなコマンドラインプロセスを次の行に沿って開始することもできます。
System.Diagnostics.Process.Start(" psfile c:\ myfile.txt -c");
psfile こちらを入手できます。
使用することもできます
ネットファイルID / close
ただし、ファイルIDを知る必要があり、もう少し作業が必要になります。
テストされていませんが、これが出発点となります。
他のヒント
ファイルのロックは、オペレーティングシステムの責任です(ファイルを開くプログラムに代わって)。ファイルがロックされた状態のままになっている場合、ロックを解除するのはOSに任されています。これは通常、ファイルを開いたプロセスが終了すると自動的に発生します。
ただし、役立つクールなユーティリティがあります。 ロック解除と呼ばれます。
別のサードパーティdllを見つけることを本当に検討します。 Streamsを処理するシステムは、エラー状態に適切に対応し、ファイルロックなどを適切な場所に残さないでください。
ライブラリがエラー条件のクリーンアップを提供する可能性はありますか?次のようなものを試してください
try {
thirdPartyObj = new ThirdPartObj();
// Some possible error causing object actions
catch(Exception ex) {
thirdPartyObj = null; // The object should close its resources
}
.Close() を使用してファイルを閉じる必要があります。ファイル オブジェクトにアクセスする方法がまだあることを確認する必要があります。
通常、このエラーは try{} ... を記述することで回避できます。最後に、ファイル I/O を実行するコードの後に {} コンストラクトを追加します。finally {} ブロックで、ファイル オブジェクトの Close メソッドを呼び出して、この状態を回避します。ファイルを作成するときに using {} ブロックを使用することもできます。これにより、この問題も解決されます。