观看目录时如何在dart中处理FileSystemException

时间:2019-01-09 17:13:46

标签: dart

我已经用dart编写了一个简单的命令行工具,如果目录不存在,我会监视目录中的更改。我得到FileSystemsException。

我尝试使用try和catch子句来处理它。发生异常时,catch子句中的代码不会执行

try {
watcher.events.listen((event) {
  if (event.type == ChangeType.ADD) {
    print("THE FILE WAS ADDED");
    print(event.path);
} else if (event.type == ChangeType.MODIFY) {
    print("THE FILE WAS MODIFIED");
    print(event.path);
} else {
    print("THE FILE WAS REMOVED");
    print(event.path);
}
});
} on FileSystemException {
  print("Exception Occurs");
}

我希望控制台显示“发生异常”

1 个答案:

答案 0 :(得分:0)

有两种可能性:

  1. 异常发生在此块之外(也许是构造观察器的地方?)
  2. 该异常是未处理的异步异常。这可能来自Stream,也可能来自其他某些Future,例如ready Future。

您可以为异步异常添加处理程序,如下所示:

try {
  // If this is in an `async` method, use `await` within the try block
  await watcher.ready;
  // Otherwise add a error handler on the Future
  watcher.ready.catchError((e) {
    print('Exception in the ready Future');
  });

  watcher.events.listen((event) {
    ...
  }, onError: (e) {
    print('Exception in the Stream');
  });
} on FileSystemException {
  print("Exception Occurs");
}

我的猜测是在ready的未来中浮出水面。