1

我想跟踪目录中的新文件。我使用了文档中给出的脚本:http ://nodejs.org/api/fs.html#fs_fs_watch_filename_options_listener

var fs = require('fs');
fs.watch('mydir/', function (event, filename) {
    console.log('event is: ' + event);
    if (filename) {
        console.log('filename provided: ' + filename);
    } else {
        console.log('filename not provided');
    }
});

例如,我添加了要mydir/使用touch hello.txt的文件。

运行脚本时,我没有得到新的文件名,因为发出的事件是rename!! 这是控制台输出。

event is: rename
filename not provided

如何获取文件新名称hello.txt

谢谢。

4

3 回答 3

4

同一页面还描述了您的问题:

并非每个平台都支持在回调中提供文件名参数(目前仅在 Linux 和 Windows 上支持)。即使在受支持的平台上,也不总是保证提供文件名。

我认为你最好的选择是切换到另一个提供类似功能的模块,比如手表(我自己没有任何经验)。

于 2013-02-28T11:49:22.780 回答
1

fs.watch('somedir', (event, filename) => {
})

这里filename有效,您只需要跟踪第二个参数。

Mac 10.11.3,节点 v5.9

于 2016-04-10T14:00:47.840 回答
1

https://github.com/paulmillr/chokidar上的chokidar很容易设置。按照自述文件中的说明进行设置。这是我用来检测视频文件何时在相对于我的 Node.js 应用程序的根目录的 /video 子文件夹中生成的一个快速示例:

  • 安装 Node.js(包括 NPM)
  • 生成 package.jsonnpm init
  • 将 Chokidar 库安装到 /node_modules 子文件夹中并将依赖项保存到 package.jsonnpm install chokidar --save
  • 创建一个示例程序文件(即 touch video.js
  • 创建一个文件夹来观看(即mkdir videos
  • 将以下代码添加到 video.js(如 README 中所述,它将监视 /videos 子文件夹中的更改并忽略以句号为前缀的文件名): var chokidar = require('chokidar'); chokidar.watch('./videos', {ignored: /[\/\\]\./}).on('all', function(event, path) { console.log(event, path); });

  • 启动node video.js打印到输出的程序,指示正在观看 /videos 子目录及其内容,即 $ node video.js addDir ./videos

  • 将文件(即 test.mov)复制/保存到 /videos 子目录会在终端的标准输出中打印以下内容: add videos/test.mov
  • 删除文件会将以下内容打印到终端: unlink videos/test.mov
于 2016-11-14T22:32:45.810 回答