Frage

Ich muss feststellen, welche Ordner Dateien enthalten, die "kürzlich" (innerhalb eines bestimmten Intervalls) geändert wurden.Ich stelle fest, dass Ordnerdatumsstempel anscheinend aktualisiert werden, wenn eine enthaltene Datei geändert wird, aber dieses Verhalten breitet sich nicht im Baum aus, dh.der Datumsstempel des Ordners, der den Ordner enthält, der die geänderte Datei enthält, wird nicht aktualisiert.

Ich kann mit diesem Verhalten arbeiten, aber ich vermute, es hängt von Plattform / Dateisystem / Netzwerk oder lokalem Laufwerk usw. ab.Ich würde es immer noch gerne nutzen, wo ich könnte, also brauche ich eine boolesche Funktion, um true zurückzugeben, wenn die Plattform / Festplatte, auf der meine App ausgeführt wird, dieses Verhalten unterstützt.

Ich bin sehr glücklich, durch den Baum zu gehen.Was ich vermeiden möchte, ist, für jede Datei in jedem Ordner ein FindFirst/ FindNext zu FindFirst/FindNext , um festzustellen, ob am letzten Tag Änderungen vorgenommen wurden - wenn ich dies für Ordner vermeiden kann, deren Datumsstempel nicht innerhalb des letzten geändert wurden Tag wird es viel Zeit sparen.

Keine korrekte Lösung

Andere Tipps

Bei den bisher veröffentlichten Lösungen geht es darum, Benachrichtigungen sofort zu erhalten, und sie werden für diesen Zweck gut funktionieren.Wenn Sie in die Vergangenheit schauen und sehen möchten, wann etwas zuletzt geändert wurde, anstatt es in Echtzeit zu überwachen, wird es schwieriger.Ich denke, es gibt keine Möglichkeit, dies zu tun, außer indem Sie den Ordnerbaum rekursiv durchsuchen und Datumsstempel überprüfen.

BEARBEITEN: Als Antwort auf den Kommentar des OP, ja, es sieht nicht so aus, als gäbe es eine Möglichkeit, FindFirst / FindNext so zu konfigurieren, dass nur Verzeichnisse und keine Dateien getroffen werden.Mit diesem Filter können Sie jedoch die Überprüfung der Datumsangaben in den Dateien überspringen: (SearchRec.Attr and SysUtils.faDirectory <> 0).Das sollte die Dinge ein wenig beschleunigen.Überprüfen Sie die Datumsangaben in den Akten überhaupt nicht.Sie müssen jedoch wahrscheinlich immer noch alles durchsuchen, da die Windows-API keine (mir bekannte) Möglichkeit bietet, nur nach Ordnern und nicht nach Dateien zu suchen.

Ich habe zu diesem Zweck einen Code für einen meiner Projekte geschrieben.Dies verwendet FindFirstchangennotification und FindNextCangAnnotification-API-Funktionen. Hier ist der Code (ich habe einige projektspezifische Portionen entfernt):

generasacodicetagpre.

Dies bietet zwei Klassen;Eine Thread-Klasse, die einen Ordner für Änderungen überwacht, und wenn eine Änderung erfasst wird, gibt es die aktuelle Änderungszeit und die vorherige Änderung der Zeit über das Onfolkinge-Ereignis zurück.Und eine Listklasse zum Speichern einer Liste von Überwachungsfäden.Diese Liste endet jedem eigenen Thread automatisch, wenn der Thread aus der Liste entfernt wird.

Ich hoffe, es hilft dir.

Sie sollten einen Blick auf http://help.delphi-jedi.org / item.php? id= 172977 Dies ist eine bereites Lösung. Wenn Sie nicht ganzen JVCl herunterladen und installieren möchten (das jedoch ein großartiger Code ist), möchten Sie die Dateiquelle online sehen - http://jvcl.svn.sourceforge.net/viewvc/jvcl/trunk/jvcl/run/jvCangennotify.PAS? Revision= 12481 & view= markup

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top