質問
ファイルに書き込み/削除したいのですが、ファイルが別のプログラムで使用されている場合、クラッシュが発生することがあります。ファイルが別のプロセスによって開かれているかどうか、または書き込みのために開くことができるかどうかを確認するにはどうすればよいですか?
解決
問題は、排他的アクセスを取得できるかどうかを確認してからファイルを開くまでの間に、他の何かがそのファイルへの排他的アクセスを取得し、とにかく例外が発生することです。
ファイルの排他ロックを取得できるかどうかを確認する唯一の絶対確実な方法は、ファイルの排他ロックを取得してみることです。取得できれば、取得したことになります。
そうでない場合は、例外をキャッチし、次のいずれかを実行します。
- 何か他のことをしてください
- しばらく待ってからもう一度試してください
それは人生において、許可よりも許しを求めたほうが良い状況の 1 つです :)
他のヒント
ここまでVistaおよびファイルロックの起源を取得するための新しい方法があります: のhttp:// WWW。 remkoweijnen.nl/blog/2011/01/03/cannot-access-files-but-need-the-origin/する
ユーザーモード: ロックされたファイルに書き込むための最良の方法は、他のプロセスでそれを閉じるために、ユーザに依頼することです。バッチプロセスでは、そのようなファイルを無視して、問題をログに記録する必要があります。他のプロセスの名前を提供することは、ユーザーのための解決策を見つけるための非常に良い方法です。
あなたがファイルへの書き込みが可能かどうかを確認したいのですがわからないどのプログラミング言語で。 Javaでは、 java.io .File.canWrite()のはあなたのために仕事をすることができます。
一般ます:
UNIX系OSでは、あなたはhref="http://en.wikipedia.org/wiki/Lsof" rel="nofollow noreferrer">のlsofコマンドの
どのプログラムがファイルのハンドルを保持しているかを確認したい場合は、 プロセスモニター (Microsoft からダウンロード)。
このツールにはコマンド ライン インターフェイスがあるため、言語のスクリプト インターフェイスを使用できます (たとえば、 java.lang.Process
) ツールを実行すると、有用なエラー メッセージが表示されます。