Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/432.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将文件添加到目录时在node.js中获取通知_Javascript_Node.js_Socket.io_Watch - Fatal编程技术网

Javascript 将文件添加到目录时在node.js中获取通知

Javascript 将文件添加到目录时在node.js中获取通知,javascript,node.js,socket.io,watch,Javascript,Node.js,Socket.io,Watch,我正在编写一些node.js代码,在其中我希望在将文件加载到目录或在目录中更新该文件时触发操作——我希望目录中的相同文件名会被重复替换 因此,当节点子进程完成将文件保存到监视的目录时,我希望触发使用该文件的后续进程: 此线程似乎是相关的,但对于如何知道文件何时更新或被替换,还不够明确: 隐式地说,我还需要在触发下一个事件之前验证对监视目录中的文件的更新过程是否已完成 一如既往地感谢你的建议 我认为你链接的线程非常明确,不是吗?您可以使用标准方法fs.watch和fs.watchFile,也可以使

我正在编写一些node.js代码,在其中我希望在将文件加载到目录或在目录中更新该文件时触发操作——我希望目录中的相同文件名会被重复替换

因此,当节点子进程完成将文件保存到监视的目录时,我希望触发使用该文件的后续进程:

此线程似乎是相关的,但对于如何知道文件何时更新或被替换,还不够明确:

隐式地说,我还需要在触发下一个事件之前验证对监视目录中的文件的更新过程是否已完成


一如既往地感谢你的建议

我认为你链接的线程非常明确,不是吗?您可以使用标准方法
fs.watch
fs.watchFile
,也可以使用一个漂亮的小包装器,例如。i、 e:


您也可以使用
notify

var Notify = require('fs.notify');

var files = [
  '/path/to/file',
  '/file/i/want/to/watch'
];

var notifications = new Notify(files);
notifications.on('change', function (file, event, path) {
  console.log('caught a ' + event + ' event on ' + path);
});

// if you want to add more files you can use the
notifications.add([path, morepaths]);

// kill everything
notifications.close();

但是
chokidar
更好。

如果你是在一个单独的过程中将数据流到一个文件中,而不是在观看的过程中,没有办法真正知道它什么时候“完成”,除非你知道它“完成”时应该达到的文件大小,你可以定期检查文件大小,比如说100毫秒,只要文件大小大于上次检查时的大小,您就可以认为写入不完整。@levi但假设在大小不增加的检查中,完成写入是一种可能不正确的假设(请参阅:网络延迟、磁盘延迟、任务切换等)。@Chad valid point。我想如果你真的想写的话,写过程可以用字符串“IS_writing”在文件内容前加上前缀,一旦完成就删除它。监视过程可以周期性地读取文件的前几个字节,并检查是否缺少字符串。@levi是的,OP你能给我们一些关于你试图完成什么的更多信息吗?也许我们可以建议一个更健壮的解决方案?这是每次只添加一个文件时,为文件夹中的每个文件都提供一个“添加”事件。这是故意的行为吗?@Joebuckman那绝对不是故意的行为。我很确定问题出在您这边,但您可以随时在github上打开问题。我向他发送了一个测试,该测试以一种奇怪的方式失败,但应该测试以下内容:
var Notify = require('fs.notify');

var files = [
  '/path/to/file',
  '/file/i/want/to/watch'
];

var notifications = new Notify(files);
notifications.on('change', function (file, event, path) {
  console.log('caught a ' + event + ' event on ' + path);
});

// if you want to add more files you can use the
notifications.add([path, morepaths]);

// kill everything
notifications.close();