Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.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
Filesystems Node.JS:What's;fs.watchFile";工作_Filesystems_Node.js_Filesystemwatcher - Fatal编程技术网

Filesystems Node.JS:What's;fs.watchFile";工作

Filesystems Node.JS:What's;fs.watchFile";工作,filesystems,node.js,filesystemwatcher,Filesystems,Node.js,Filesystemwatcher,根据fs.watchFile(filename,[options],listener)函数启动一个例程,该例程将 注意文件名的更改。每次访问文件时都会调用回调侦听器 它还说 选项如果提供,则应该是一个包含两个成员的对象,一个是布尔值,持久值,一个是以毫秒为单位的轮询值 这表示它将根据间隔中的内容每隔一段时间检查一次。但它也说 默认值为{persistent:true,interval:0} 那么这是否意味着它将每隔毫秒检查一次文件时间是否发生了变化?它是否侦听操作系统级事件?这是怎么回事?是的,

根据fs.watchFile(filename,[options],listener)函数启动一个例程,该例程将

注意
文件名的更改。每次访问文件时都会调用
回调
侦听器

它还说

选项
如果提供,则应该是一个包含两个成员的对象,一个是布尔值,
持久值
,一个是以毫秒为单位的轮询值

这表示它将根据间隔中的内容每隔一段时间检查一次。但它也说

默认值为
{persistent:true,interval:0}


那么这是否意味着它将每隔毫秒检查一次文件时间是否发生了变化?它是否侦听操作系统级事件?这是怎么回事?

是的,cpedros是正确的,这似乎是重复的。不过,我想我可以对这一点有更多的了解

每个操作系统都有自己的文件更改事件被触发。在Linux上,它是inotify(以前是dnotify),在Mac上是fsevents,在Windows上是FileSystemWatcher。我不确定底层代码是否能处理每种情况,但这是一般的想法

如果您只想在Linux上观看一个文件,我建议您。如果要查看目录,请将inotify plus与一起使用。我已经实现了这一点,它就像一个魅力

如果你感兴趣,我可以发布一些代码。node inotify plus的优点在于,它抽象了inotify的许多缺点,并提供了一个直观的API,用于侦听文件上的特定事件

编辑:这不应该用来观看大量的文件。在我的系统中,最大值是8192。可以使用以下命令找到您的最大值
cat/proc/sys/fs/inotify/max\u user\u watches
。这可以用来监视目录中的更改,然后从中找出各个文件。如果直接位于该目录下的文件被修改,则会触发修改事件


编辑:感谢@guiomie指出Windows现在完全支持观看文件。我假设这是v0.6.x版本。

为了扩展tjameson的奇妙答案,您可以使用规范化节点版本和操作系统版本之间的API。它还为
取消链接
新建
提供事件,而不仅仅是
更改
,并增加了对目录树监视的支持。

我认为这与See tjameson的答案是重复的:虽然它可能是重复的,但旧问题中提供的答案已经过时。我估计到2013年,还有更多的现代解决方案。值得注意的是,在NodeV6中,默认值是
{persistent:true,interval:5007}
。0的间隔没有逻辑意义。问题提出时,情况似乎并非如此,但将0更改为1:
ctx->interval=interval?间隔:1。这是在Windows上的Cygwin(unix emulator)上测试的,最终将在Solaris中使用。我相信Node.js仅在Linux上受支持,所以它可能在不支持inotify的情况下进行某种轮询。@tjameson您提到过不要用它查看大量文件或文件夹。您是否想到了一种更适合于查看大量文件或文件夹的方法?@tjameson File Watch现在在Windows上受支持。@tjameson您是否介意发布一个小示例,说明如何将node inotify pluspls与node walk集成在一起(如果有的话,请:)