Node.js的fs模块中,关于fs.watch的疑问
在学习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.txt为什么会出现两次?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
因为你rename的时候又触发了一次
看fs.watch的文档,回调签名不是(err, file) 而是(event, file),第一个参数告诉你发生了什么事情