Es ist folgender Problemfall. Ich muss eine BESTIMMTE Datei überwachen.
Die Lösung über FindFirstChangeNotification hat für mich keinen Vorteil, da auch dort mit einer Schleife (ZusatzThread, Timer) gearbeitet werden müsste.
Also nehm ich den einfachen Weg und überwache mit folgendem Code das ÄnderungsDatum der Datei, welche mit allen möglichen Schreib und Leserechten für andere Programme geöffnet ist.
(Somit kann ein fremdes Programm da reinschreiben)
Code:
function TFileWatch.getModifiedTime : TDateTime;
var
fCreationTime : FileTime;
fLastAccessTime : FileTime;
fLastWriteTime : FileTime;
begin
result := -1;
if FWatchFileHandle <> INVALID_HANDLE_VALUE then
begin
GetFileTime(FWatchFileHandle, @fCreationTime, @fLastAccessTime, @fLastWriteTime);
result:= FileTimeToDateTime(fLastWriteTime);
end; // von if invalid
Handle
end; // von getmodifiedTime
Dann frage ich in einem Timer alle 100 ms ab, ob sich das Datei Datum geändert hat
Das funktioniert zwar, aber mehr schlecht als Recht. Es gibt nämlich das Problem, wenn die Datei zu schnell hintereinander geändert wird. Dann fehlt mir eine Änderung.
Wüsste jemand eine Lösung dafür ?
besten Dank !
Gruß stoxx