watch 方法
开始监视 FileSystemEntity 的变化。
实现使用平台依赖的事件驱动 API 来接收文件系统通知,因此行为取决于平台。
-
Windows
:使用ReadDirectoryChangesW
。实现仅支持监视目录。递归监视受支持。 -
Linux
:使用inotify
。实现支持监视文件和目录。递归监视不受支持。注意:当直接监视文件时,删除事件可能不会按预期发生。 -
OS X
:使用 文件系统事件 API。实现支持监视文件和目录。递归监视受支持。此 API 有一些限制
系统将在返回的 Stream 被监听时开始监听事件,而不是在发出 watch 调用时。
返回值是一个无限广播 Stream,仅在以下情况之一发生时停止
- Stream 被取消,例如通过在 StreamSubscription 上调用
cancel
。 - 监视的 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);
}