【问题标题】:Why does fs.watch log three entries per file when a new file is placed in the directory为什么将新文件放在目录中时 fs.watch 会为每个文件记录三个条目
【发布时间】:2018-03-12 19:29:33
【问题描述】:

我不知道我的代码是否有问题。我正在查看新 json 文件的目录。 fs.watch 会看到该文件,但会在日志中记录三个条目。我似乎无法弄清楚为什么。

我的代码

'use strict';
var fs = require('fs'); 
fs.watch('C:/Users/PCAdmin/Downloads/jsonin', function (event, filename) {
  console.log('event is: ' + event);
  if (filename) {
    console.log('filename provided: ' + filename);
  } else {
    console.log('filename not provided');
  }
});

输出:

LOG ENTRIES 
event is: rename
filename provided: 23456.json
event is: change
filename provided: 23456.json
event is: change
filename provided: 23456.json

【问题讨论】:

  • 你能描述一下填充那个目录的东西吗?您所看到的可能与首先将文件放在那里的事情有很大关系。
  • 现在我只是从另一个目录复制一个测试文件并粘贴到监视目录中。
  • 因此,经过大量研究,fs.watch 似乎正在获取 ReadDirectoryChangesW FILE_NOTIFY_CHANGE_FILE_NAME、FILE_NOTIFY_CHANGE_LAST_WRITE、FILE_NOTIFY_CHANGE_ATTRIBUTES

标签: node.js fs


【解决方案1】:

因此,经过大量研究,fs.watch 似乎正在获取 ReadDirectoryChangesW FILE_NOTIFY_CHANGE_FILE_NAME、FILE_NOTIFY_CHANGE_LAST_WRITE、FILE_NOTIFY_CHANGE_ATTRIBUTES

为了缓解这个问题,我添加了一个额外的 if 语句来限制对 rename 的响应,这将捕获正在添加的文件名

'use strict';
var fs = require('fs'); 
fs.watch('C:/Users/PCAdmin/Downloads/jsonin', function (event, filename) {
  if (event ==='rename') {
  console.log('event is: ' + event);

  if (filename) {
    console.log('filename provided: ' + filename);
    return;
  } else {
    console.log('filename not provided');
    return;
  }
  }
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-03
    • 1970-01-01
    • 1970-01-01
    • 2017-07-02
    • 2016-08-02
    • 2020-11-22
    • 2012-08-27
    相关资源
    最近更新 更多