Wie wäre is mit folgender Idee: du überwachst den Ordner weiterhin wie gehabt. Sobald dann eine neue Datei erstellt wird, versuchst du aber nicht sofort, diese auszulesen sondern fügst einen Eintrag in eine Liste hinzu. So ein Eintrag könnte z.B. sein:
Delphi-Quellcode:
type
TFileChangeType = (fctNewFile, fctModfied, fctDeleted);
PFileChangeData = ^TFileChangeData;
TFileChangeData = record
ChangeType : TFileChangeType; // welche Änderung
FileName : string; // der komplette Pfad
Notified : TDateTime; // Zeitpunkt, an dem der Eintrag in die Liste hinzugefügt wurde
end;
Dieses Record füllst du dann mit den entsprechenden Parametern aus und fügst es wie gesagt in eine Liste hinzu.
Diese Liste arbeitest du dann z.B. in einem seperaten Thread ab. Sobald eine Änderung dann erfolgreich in deine Datenbank übertragen wurde, löschst du den Eintrag aus der Liste wieder.
Wenn du jetzt z.B. noch nicht auf eine Datei zugreifen kannst, dann schlägt das Hinzufügen ja fehl und der Eintrag wird dann nicht aus der Liste entfernt. Dann wartest du halt etwas (im Thread z.B. mit Sleep) oder arbeitest erstmal andere Einträge ab und probierst es dann nochmal. Das machst du dann solange, bis du geschafft hast.