Spec-Zone.ru › Dart 2

dart:io

Метод watch

Stream<FileSystemEvent> watch(
  1. {int events = FileSystemEvent.all,
  2. bool recursive = false}
)

Начать наблюдение за 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API