метод watch
Начинает отслеживать изменения в FileSystemEntity.
Реализация использует зависящие от платформы событийные API для получения уведомлений файловой системы, поэтому поведение зависит от платформы.
-
Windows: ИспользуетReadDirectoryChangesW. Реализация поддерживает отслеживание только каталогов. Поддерживается рекурсивное отслеживание. -
Linux: Используетinotify. Реализация поддерживает отслеживание как файлов, так и каталогов. Рекурсивное отслеживание не поддерживается. Примечание: при непосредственном отслеживании файлов события удаления могут происходить не так, как ожидается. -
OS X: Использует API событий файловой системы. Реализация поддерживает отслеживание как файлов, так и каталогов. Поддерживается рекурсивное отслеживание. У этого API есть несколько ограничений:
Система начнет прослушивать события, когда начнется прослушивание возвращенного Stream, а не при вызове watch.
Возвращаемое значение — бесконечный широковещательный Stream, который остановится только в одном из следующих случаев:
- Stream отменен, например, при вызове
cancelу StreamSubscription. - Отслеживаемый FileSystemEntity удален.
- Системный наблюдатель неожиданно завершает работу. Например, в
Windowsэто происходит при переполнении буфера, принимающего события изReadDirectoryChangesW.
Используйте events, чтобы указать, какие события прослушивать. Константы из FileSystemEvent можно объединять с помощью оператора OR. По умолчанию используется FileSystemEvent.all.
Событие перемещения может быть представлено отдельными событиями удаления и создания.
Реализация
Stream<FileSystemEvent> watch(
{int events = FileSystemEvent.all, bool recursive = false}) {
// FIXME(bkonyi): find a way to do this using the raw path.
final String trimmedPath = _trimTrailingPathSeparators(path);
final IOOverrides? overrides = IOOverrides.current;
if (overrides == null) {
return _FileSystemWatcher._watch(trimmedPath, events, recursive);
}
return overrides.fsWatch(trimmedPath, events, recursive);
}
© 2012 the Dart project authors
Licensed under the BSD 3-Clause "New" or "Revised" License.
https://api.dart.dev/stable/2.19.6/dart-io/FileSystemEntity/watch.html