watch 方法
开始监视 FileSystemEntity 的变化。
实现使用了平台相关的基于事件的 API 来接收文件系统通知,因此行为依赖于平台。
-
Windows
:使用ReadDirectoryChangesW
。实现仅支持监视目录。递归监视被支持。 -
Linux
:使用inotify
。实现支持监视文件和目录。递归监视不被支持。注意:直接监视文件时,可能会不会如预期发生删除事件。 -
OS X
:使用文件系统事件 API。实现支持监视文件和目录。递归监视被支持。该 API 有一些限制
系统一旦开始监听返回的 Stream,而不是当发出 调用时,系统将开始监听事件。
返回值是一个 endless broadcast 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);
}