【问题标题】:Node.js: Track new files in a directoryNode.js:跟踪目录中的新文件
【发布时间】:2016-11-15 06:32:45
【问题描述】:

我想跟踪目录中的新文件。我使用了文档中给出的脚本: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');
    }
});

例如,我使用touch hello.txt 将文件添加到mydir/

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

event is: rename
filename not provided

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

谢谢。

【问题讨论】:

    标签: node.js fs


    【解决方案1】:

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

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

    我认为最好的办法是切换到另一个提供类似功能的模块,例如 watch(我自己没有任何经验)。

    【讨论】:

    • 谢谢罗伯特。我目前使用的是 Mac,这就是我遇到 fs 问题的原因。我会切换到观看。
    【解决方案2】:

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

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

    Mac 10.11.3,节点 v5.9

    【讨论】:

      【解决方案3】:

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

      • 安装 Node.js(包括 NPM)
      • 生成 package.json npm init
      • 将 Chokidar 库安装到 /node_modules 子文件夹中,并将依赖项保存到 package.json npm install chokidar --save
      • 创建示例程序文件(即触摸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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-01-16
        • 1970-01-01
        • 2016-12-19
        • 1970-01-01
        • 2016-12-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多