Monitor file and or directory

Asked

Viewed 774 times

3

I have this method that performs the reading of the file

const fs = require('fs');
const path = require('path');

let arquivo = path.join(__dirname, 'arquivo.txt');

fs.readFile(arquivo, { encoding: 'utf-8' }, function(err, data) {
    if (!err) {
        // Retorna o conteúdo do arquivo.txt
        console.log(data);
    } else {
        // Retorna o erro
        console.log(err);
    }
});

I need to monitor any changes made to this file and directory and return the last change made, it is possible ?

  • 2

    There is the Fs.watch that has some issues outside of macOS and Windows. What operating system do you use?

  • Now I’m using the Centos 7. It’s my main system, I don’t like to use Windows rs.

1 answer

4


Update 1

Monitor acquisitions and directories using the library Node-watch.

let watch = require('node-watch');
watch(['arquivo.txt', 'teste/', 'teste/arquivo.txt'], console.log);

Behold running on repl.it


Through the comments I found the package Chokidar and I got the result.

const chokidar = require('chokidar');
const fs = require('fs');

let conteudo_anterior = '';
let arquivo = 'arquivo.txt';

// Faz a leitura inicial
fs.readFile(arquivo, { encoding: 'utf-8' }, function(err, data) {
    if (!err) {
        let linhas = data.trim().split('\n');
        // Retorna o conteúdo
        linhas.forEach(function(linha) {
            console.log(linha);
            conteudo_anterior = linha;
        });
    } else {
        // Retorna o erro
        console.log(err);
    }
});

// Monitora o arquivo
let watcher = chokidar.watch(arquivo, { persistent: true });
watcher.on('change', (path, stats) => {
    if (stats) {
        fs.readFile(path, { encoding: 'utf-8' }, function(err, data) {
            if (!err) {
                let linhas = data.trim().split('\n');
                // Última linha
                let ultima = linhas.slice(-1)[0];
                // Verifica se a linhas tem conteúdo.
                // Se tiver conteúdo e se o conteúdo é diferente do anterior, caso contrário nada faz.
                (ultima.length > 0 && ultima != conteudo_anterior) ? console.log(ultima) : '';
                conteudo_anterior = ultima;
            } else {
                // Retorna o erro
                console.log(err);
            }
        });
    }
});

Monitorando Arquivo

Browser other questions tagged

You are not signed in. Login or sign up in order to post.