如何使用行号读取文件 - node.js?

时间:2014-05-17 07:47:23

标签: node.js

我在node.js工作。

要求:

Note: Log - directoryName(Contains log files)
  1. 必须听取log directory更改。如果任何日志文件添加到日志目录,我必须阅读特定添加的日志文件。

  2. 如果有任何内容附加到现有文件。必须阅读特定的更改而不是整个文件。

  3. 注意:

    我正在使用chokidar来查看目录。

    var chokidar = require('chokidar');
    var watcher = chokidar.watch('../log', {ignored: /[\/\\]\./, persistent: true});
    
     watcher.on("add", function(path){
        new lazy(fs.createReadStream(path)).lines.forEach(function(line) {
            console.log(line.toString());
        });
     }).on("change", function(path){
        //Reading from first line
        new lazy(fs.createReadStream(path)).lines.forEach(function(line) {
            console.log(line.toString());
        });
     });
    

    问题

    以上代码基于目录更改和文件添加工作。问题在于阅读文件。如果某些文件更改,我想只读取特定的更改而不是从开头。

    是否有任何节点模块只读取文件中的附加内容?

    任何建议都将不胜感激。

1 个答案:

答案 0 :(得分:1)

您应该使用node-tail或查看其执行方式:https://github.com/lucagrulla/node-tail

首先,它将使用fs.statSync记录文件的大小,然后在每次更改时,它都会获得新的大小。然后它开始从先前记录的结尾(文件的大小)读取文件,直到新的大小。

fs.createReadStream支持startend个选项来阅读文件。