Bezeichnung
MonitorDirectory -- überwacht Änderungen in einem Verzeichnis (V8.0)
Übersicht
[id] = MonitorDirectory(id, dir$[, table])
Beschreibung
Dieser Befehl kann verwendet werden, um Änderungen in dem durch dir$ angegebenen Verzeichnis zu überwachen. Um Verzeichnisänderungen zu überwachen, erstellt MonitorDirectory() ein neues Verzeichnisobjekt und weist ihm die angegebene id zu. Wenn Sie Nil in id übergeben, wählt MonitorDirectory() automatisch einen freien Identifikator und gibt diesen zurück.

Wenn sich etwas in dem von dir$ angegebenen Verzeichnis ändert, sendet MonitorDirectory() ein DirectoryChanged-Ereignis an Ihr Skript. Um mit diesem Ereignis umgehen zu können, müssen Sie zunächst einen Ereignis-Handler installieren, indem Sie den Befehl InstallEventHandler() verwenden. Siehe InstallEventHandler für Details.

MonitorDirectory() akzeptiert auch ein optionales Tabellenargument, mit dem Sie einige weitere Optionen konfigurieren können. Die folgenden Tags werden derzeit vom optionalen Tabellenargument erkannt:

All:
Wenn dieser Tag auf True gesetzt ist, leitet MonitorDirectory() alle Verzeichnisänderungsbenachrichtigungen vom Betriebssystem an Ihr Skript weiter. Überlegen Sie sich dies zweimal, denn je nach Betriebssystem und Dateisystem erhalten Sie möglicherweise mehrere Meldungen für eine einzige Änderung, weil das Dateisystem intern ist. Standardmäßig versucht MonitorDirectory(), solche doppelten Benachrichtigungen für Sie zu filtern, damit Sie nicht mehrere Meldungen für eine einzige Änderung erhalten. Wenn Sie nicht möchten, dass MonitorDirectory() diesen Filter anwendet, d.h. wenn Sie alle Benachrichtigungen möchten, setzen Sie diesen Tag auf True. Der Standardwert ist False.

UserData:
Dieser Tag kann auf einen beliebigen Typ gesetzt werden. MonitorDirectory() speichert ihn im Feld MonitorUserData der Nachricht, die vom InstallEventHandler() gesendet wird. Dies ist nützlich, um globale Variablen zu vermeiden.

ReportChanges:
Wenn dieser Tag auf True gesetzt ist, wird Ihr Ereignis-Callback auch darüber informiert, was sich genau geändert hat. Ihr Ereignis-Callback erhält zwei neue Parameter: Type informiert Sie über die Art der Änderung, d.h. ob eine Datei oder ein Verzeichnis hinzugefügt, entfernt oder geändert wurde, und Name enthält den Namen der geänderten Datei oder des Verzeichnisses. Beachten Sie, dass das Tabellen-Tag All (siehe oben) ignoriert wird, wenn ReportChanges auf True gesetzt wird. (V9.0)

Beachten Sie, dass das von diesem Befehl erstellte Verzeichnisobjekt nur zur Überwachung von Verzeichnisänderungen verwendet werden darf. Es ist nicht möglich, es an andere Verzeichnisbefehle wie NextDirectoryEntry() oder RewindDirectory() zu übergeben. Eine Ausnahme ist der Befehl CloseDirectory(): Sie sollten CloseDirectory() aufrufen, sobald Sie die Überwachung des Verzeichnisses abgeschlossen haben. Dadurch wird sichergestellt, dass keine Ressourcen verschwendet und keine unnötigen Nachrichten in Ihrem Skript bereitgestellt werden.

Beachten Sie auch, dass einige Dateisysteme die Überwachung von Verzeichnissen nicht unterstützen. Dies kann insbesondere auf Netzwerkdatenträger oder Netzwerkdateisystemen der Fall sein. In diesem Fall kann MonitorDirectory() fehlschlagen.

Siehe auch @DIRECTORY und OpenDirectory().

Eingaben
id
Identifikator des Verzeichnis oder Nil für die automatische ID-Auswahl
dir$
Name des zu überwachenden Verzeichnisses
table
optional: Tabelle mit weiteren Parametern (siehe oben)
Rückgabewerte
id
optional: Identifikator des Verzeichnis; wird nur zurückgegeben werden, wenn Sie Nil als id angegeben haben (siehe oben)
Beispiel
InstallEventHandler({DirectoryChanged = Function(msg)
        NPrint(msg.action, msg.id, msg.directory)
    EndFunction})
MonitorDirectory(1, "Data")
Repeat
    WaitEvent
Forever
Der obige Code überwacht alle Änderungen im Verzeichnis "Data" und gibt eine Meldung aus, wenn sich in diesem Verzeichnis etwas ändert.

Navigation zeigen