Метод watch
Начать наблюдение за FileSystemEntity на предмет изменений.
Реализация использует зависящие от платформы API на основе событий для получения уведомлений о файловой системе, поэтому поведение зависит от платформы.
-
Windows: ИспользуетReadDirectoryChangesW. Реализация поддерживает только наблюдение за каталогами. Рекурсивное наблюдение поддерживается. -
Linux: Используетinotify. Реализация поддерживает наблюдение как за файлами, так и за каталогами. Рекурсивное наблюдение не поддерживается. Примечание: при наблюдении за файлами напрямую события удаления могут не происходить как ожидается. -
OS X: ИспользуетFSEvents. Реализация поддерживает наблюдение как за файлами, так и за каталогами. Рекурсивное наблюдение поддерживается.
Система начнёт прослушивать события, как только к возвращаемому потоку Stream будет установлено подключение, а не в момент вызова метода watch.
Возвращаемое значение — бесконечный рассылающий Stream, который останавливается только в одном из следующих случаев:
- Поток Stream отменён, например, вызовом
cancelна StreamSubscription. - FileSystemEntity, за которым ведется наблюдение, удаляется.
- Система мониторинга выходит из строя неожиданно. Например, на
Windowsэто происходит, когда буфер, который получает события отReadDirectoryChangesW, переполняется.
Используйте events для указания событий, на которые нужно подписаться. Константы в FileSystemEvent могут быть объединены с помощью оператора «или» для смешивания событий. По умолчанию используется 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.18.5/dart-io/FileSystemEntity/watch.html