C'è un modo semplice per rilevare se un file viene aperto in qualsiasi processo in Windows?Qual è un modo programmatico per rilevare se un file viene aperto in Windows?
Ad esempio, sto monitorando una directory e se i file vengono inseriti nella directory, voglio eseguire alcune azioni su questi file.
Non voglio eseguire queste azioni, se i file vengono ancora copiati nella directory o se il contenuto di questi file è ancora in fase di aggiornamento.
Quindi, quello che sta succedendo è che dato un nome di file, voglio implementare una funzione, come la funzione IsFileOpenedAnywhereElseInAnyProcess(const PathName: string): Boolean
, che restituisce true
o false
.
Uno dei modi che posso pensare, è quella di rinominare il file, e se la ridenominazione ha esito positivo, nessun altro processo hanno aperto il file che mi interessa, in questo modo:
function IsFileOpenedAnywhereElseInAnyProcess(const PathName: string): Boolean;
begin
Result := not (MoveFileEx(PathName, PathName+'.BLAH', 0) and MoveFileEx(PathName+'.BLAH', PathName, 0));
end;
La logica se posso rinominare il file (in un'altra estensione), rinominarlo nuovamente, non viene aperto da nessun altro processo (al momento del controllo).
Grazie.
Stai usando C++, C#? –