Node.js的fs模块中,关于fs.watch的疑问
迷茫
迷茫 2017-04-17 13:23:46
[Node.js讨论组]

在学习Node.js的fs模块时候,有一个函数是fs.watch,用于监测文件目录是否有改变.然后编写了如下的测试代码:

var fs = require('fs');
var watch = './watch';
var done = './done';

fs.watch(watch, (err, file) => {
  if (file) {
    console.log(file);
    fs.rename(watch + '/' + file, done + '/' + file, (err) => {
      if (err) console.error(err);
    });
  }
});

这段程序是有问题的.假设我在watch目录下touch 1.txt, 则实际上会抛出异常:

lgtdeMacBook-Pro:test lgt$ node test.js
1.txt
1.txt
{ [Error: ENOENT: no such file or directory, rename './watch/1.txt' -> './done/1.txt']
  errno: -2,
  code: 'ENOENT',
  syscall: 'rename',
  path: './watch/1.txt',
  dest: './done/1.txt' }

这里很显然的告诉我们,1.txt居然出现了两次.第一次我们成功的通过rename从watch目录转移到done目录,从而导致第二次rename时候1.txt文件已经不存在.

疑问:

  1. 这里1.txt为什么会出现两次?

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(1)
PHP中文网

因为你rename的时候又触发了一次

看fs.watch的文档,回调签名不是(err, file) 而是(event, file),第一个参数告诉你发生了什么事情

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号