如何关闭文件夹的 fs.watch 监听器

Posted

技术标签:

【中文标题】如何关闭文件夹的 fs.watch 监听器【英文标题】:How to close fs.watch listener for a folder 【发布时间】:2019-05-27 17:50:52 【问题描述】:

我有一个应用程序,允许用户将本地文件夹的内容连续上传到云中的文件夹。该应用程序是使用electronnode.js 构建的

所以我需要帮助的代码是这样的:

  fs.watch(getHomeDirectory(), (eventname, filename) => 
   upload(
    filename,
    `$getHomeDirectory()/$filename`
  );
)

此函数作为按钮上的事件侦听器的一部分调用。

有一个 getter getHomeDirectory 函数获取用户的文件夹目录,然后是 upload 函数上传在该文件夹中添加或更改的文件。

我想要它,以便应用程序在将文件添加或更改到目标目录时不断上传文件。

现在它可以工作,但我希望用户能够关闭fs.watch,以便他们停止收听该文件夹。

我发现了这个堆栈溢出问题:NodeJS: unwatching a file and specifying a listener。然而,这只适用于fs.watchFile,当我尝试为fs.watch 做同样的事情时,它不起作用。

我不知道我需要做什么。

【问题讨论】:

你看过https://nodejs.org/docs/latest/api/fs.html#fs_event_close 【参考方案1】:

fs.watch(...) 返回一个fs.FSWatcher 的实例,它有一个.close() 方法。因此,如果您想取消观看,可以:

const watcher = fs.watch(getHomeDirectory(), (eventname, filename) => 
  // your code here
)

然后,当你完成了观察者,你会调用:

watcher.close()

【讨论】:

我不确定这是否是正确的答案,因为watcher=... 是异步的,watcher.close() 将立即关闭 我已经更新了答案,以更清楚地说明不应立即调用 watcher.close()

以上是关于如何关闭文件夹的 fs.watch 监听器的主要内容,如果未能解决你的问题,请参考以下文章

在目录上使用 fs.watch 似乎不会注意到添加的文件

当我更改观看的文件时,fs.watch 触发了两次

fs.watch 爬坑

当我更改监视文件时,fs.watch会两次触发

fs.watch 不和谐机器人上的自动重新加载命令

如何在flutter web中监听(“关闭”事件)文件下载窗口?