2

ファイルがロックされた状態のままになるエラーケースから回復する必要があります。C#でこのファイルにロックをリセットするように指示するにはどうすればよいですか?これに追加する必要があります。ファイルはサードパーティのdllによって開かれていますが、実際にはファイルハンドルにアクセスできません。

4

4 に答える 4

5

ファイルのロックは、(ファイルを開くプログラムに代わって) オペレーティング システムの責任です。ファイルがロックされた状態のままになっている場合、ロックを解除するのは OS 次第です。これは通常、ファイルを開いたプロセスが終了したときに自動的に発生します。

ただし、私が見つけた非常に優れたユーティリティが役立ちます。それはUnlockerと呼ばれます。

于 2008-10-23T02:24:52.943 に答える
1

別のサードパーティのdllを見つけることを本当に検討します。ストリームを処理するシステムは、エラー状態に適切に対応し、ファイル ロックなどをそのままにしておく必要はありません。

ライブラリがエラー状態のクリーンアップを提供する可能性はありますか? 次のようなものを試してください。

 try {
   thirdPartyObj = new ThirdPartObj();
   // Some possible error causing object actions
 catch(Exception ex) {
   thirdPartyObj = null; // The object should close its resources
 }
于 2008-10-23T02:32:47.170 に答える
1

おそらく、次の行に沿ったもので net や psfile などのコマンド ライン プロセスを開始できます。

System.Diagnostics.Process.Start("psfile c:\myfile.txt -c");

psfileはこちらから入手できます。

使用することもできます

net file ID /close

しかし、それにはファイル ID を知る必要があり、もう少し手間がかかります。

テストされていませんが、これは出発点になるはずです。

于 2008-10-23T02:53:22.823 に答える
0

.Close() を使用してファイルを閉じる必要があります。ファイル オブジェクトにアクセスする方法がまだあることを確認する必要があります。

通常、このエラーは、ファイル I/O を実行するコードの後に​​ try{} ... finally {} 構造を記述することで回避できます。finally {} ブロックでは、ファイル オブジェクトの Close メソッドを呼び出して、この状態を防ぎます。ファイルを作成するときに using {} ブロックを使用することもできます。これにより、この問題も解決されます。

于 2008-10-23T02:10:32.877 に答える