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: Использует API событий файловой системы. Реализация поддерживает отслеживание как файлов, так и каталогов. Поддерживается рекурсивное отслеживание. У этого API есть несколько ограничений:

    • Изменения, произошедшие незадолго до вызова метода watch, могут появиться в Stream.
    • Изменения, происходящие за короткий промежуток времени, могут поступать не по порядку.
    • Несколько изменений в одном каталоге могут объединяться в одно FileSystemEvent.

Система начнет прослушивать события, когда начнется прослушивание возвращенного 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

Spec-Zone.ru

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