[id] = MonitorDirectory(id, dir$[, table])
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:
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:
MonitorDirectory()
speichert ihn im Feld MonitorUserData
der Nachricht, die vom
InstallEventHandler() gesendet
wird. Dies ist nützlich, um globale Variablen zu vermeiden.
ReportChanges:
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().
id
angegeben haben (siehe oben)InstallEventHandler({DirectoryChanged = Function(msg) NPrint(msg.action, msg.id, msg.directory) EndFunction}) MonitorDirectory(1, "Data") Repeat WaitEvent ForeverDer obige Code überwacht alle Änderungen im Verzeichnis "Data" und gibt eine Meldung aus, wenn sich in diesem Verzeichnis etwas ändert.