Windowsのいずれかのプロセスでファイルが開かれているかどうかを検出する簡単な方法はありますか?
たとえば、ディレクトリを監視していて、ファイルがディレクトリに配置されている場合、これらのファイルに対していくつかのアクションを実行したいとします。
ファイルがまだディレクトリにコピーされている場合、またはこれらのファイルの内容がまだ更新されている場合は、これらのアクションを実行したくありません。
したがって、何が起こっているのかというと、ファイル名が与えられた場合、またはのいずれかIsFileOpenedAnywhereElseInAnyProcess(const PathName: string): Boolean
を返すfunctionなどの関数を実装したいと思います。true
false
私が考えることができる方法の1つは、ファイルの名前を変更することです。名前の変更が成功した場合、次のように、他のプロセスが目的のファイルを開いていません。
function IsFileOpenedAnywhereElseInAnyProcess(const PathName: string): Boolean;
begin
Result := not (MoveFileEx(PathName, PathName+'.BLAH', 0) and MoveFileEx(PathName+'.BLAH', PathName, 0));
end;
ファイルの名前を(別の拡張子に)変更してから名前を元に戻すことができれば、他のプロセスによって開かれることはありません(チェック時)。
ありがとう。