ファイルに書き込み/削除したいのですが、ファイルが別のプログラムで使用されているとクラッシュすることがあります。ファイルが別のプロセスによって開かれているかどうか、または書き込み用に開くことができるかどうかを確認するにはどうすればよいですか?
5 に答える
問題は、排他的アクセスを取得できるかどうかを確認してからファイルを開くまでの間に、他の何かがファイルへの排他的アクセスを取得し、とにかく例外が発生することです。
ファイルの排他的ロックを取得できるかどうかを確認する唯一の確実な方法は、ファイルを取得した場合に、ファイルの排他的ロックを取得しようとすることです。
そうでない場合は、例外をキャッチし、
- 他のことをしに行く
- しばらく待ってからもう一度お試しください
それは許可よりも許しを求める方が良い人生の状況の1つです:)
Vista 以降のファイル ロックの起源を取得する新しい方法があります 。
UserMode: ロックされたファイルに書き込む最善の方法は、他のプロセスでファイルを閉じるようにユーザーに依頼することです。バッチ プロセスでは、このようなファイルを無視して、問題をログに記録する必要があります。他のプロセスの名前を提供することは、ユーザーにとって解決策を見つけるための非常に良い方法です。
ファイルのハンドルを保持しているプログラムを確認するには、Process Monitor (MicroSoft からダウンロード) を使用します。
このツールにはコマンド ライン インターフェイスがあるため、言語のスクリプト インターフェイス (たとえば、java.lang.Process
) を使用してツールを実行し、有用なエラー メッセージを表示できます。
http://delphi.about.com/cs/adptips1999/a/bltip0999_3.htmで指定されている IsFileInUse
ファイルに書き込みできるかどうかを確認するプログラミング言語がわからない。Java では、java.io.File.canWrite()がその仕事をしてくれます。
全般的:
UNIX ライクな OS では、 lsofコマンドを使用できます。