NodeJS получает последнюю строку файла каждый раз, когда файл изменяется - PullRequest
0 голосов
/ 06 июня 2018

Я попытался сделать следующее, но fs.watch вызывается только при изменении файла, и я смотрю на файл test.txt в блокноте ++ Я пытаюсь заставить его тоже вызываться, не открывая test.txtв блокноте для вызова функции

const fs = require("fs");
const dir = "test.txt"
fs.watch(dir, (eventType, filename) => {
  fs.readFile(dir, 'utf-8', (err, data) => {

    let lines = data.trim().split("\n")
    console.log(lines[lines.length - 1])
  });
});

1 Ответ

0 голосов
/ 06 июня 2018

Вы можете использовать поток файлов, чтобы создать свой собственный наблюдатель, который будет запускаться каждые 10 секунд.Вы также можете добавить в него свою логику.

const fs = require('fs');

let previousLine = '';

const readFile = function (path) {
  const fileStream = fs.createReadStream(path, { encoding: 'utf8' });
  let lastLine = '';

  fileStream.on('data', function (value) {
     let linesInStream = value.split(/[\r\n]+/g);
     lastLine = linesInStream[linesInStream.length - 1];
  });

  fileStream.on('end', function () {
    /* will print only when there is change in file content */
    if (lastLine !== previousLine) {
        previousLine = lastLine;
        console.log(lastLine);
    }
  });
};

const waitTime = 10000; // 10 seconds wait

setInterval(function () {
   readFile('C:\\data.log');
}, waitTime);
...