Почему NodeJS fs.stat () не обновляет file.mtime, когда файл изменился? - PullRequest
0 голосов
/ 28 апреля 2018

У меня есть простой сценарий просмотра файлов статистики, как это:

Я запускаю fs.stat, скажем, каждые 2 секунды и ищу изменения в результате. Другое приложение может записать в файл в любой момент. Когда и когда это происходит, я вижу, что размер изменился, но mtime остается неизменным.

ENV: Windows10 / NodeJS v8.10.0

  • Я пробовал fs.watch, но у меня была такая же / похожая проблема - нет событий на небольшие изменения.
  • Если я открою журнал с помощью sublime / notepad ++, добавлю новые строки вручную и сохраню - все работает и обновляет дату

Пример сценария:

fs.stat(filename, (err, stat) => {
if (err) return console.log(err);
if (files[f]) {
    if (files[f].mtime !== stat.mtimeMs || files[f].size !== stat.size) {
        files[f].mtime = stat.mtimeMs;
        files[f].size = stat.size;
        files[f].changed = true;
    }
} else {
    let jnum = j_num(f);
    files[f] = {
        f: f,
        jnum: jnum,
        mtime: stat.mtimeMs,
        size: stat.size,
        proceed: 0,
        changed: true,
    };
}
console.log(files[f].f, files[f].size, files[f].mtime);
});

Пример вывода:

file                size  mtime

180428200919.01.log 23265 1524935545774.6038
180428200919.01.log 23265 1524935545774.6038
180428200919.01.log 23265 1524935545774.6038
180428200919.01.log 23348 1524935545774.6038
180428200919.01.log 23348 1524935545774.6038
180428200919.01.log 23348 1524935545774.6038
180428200919.01.log 23348 1524935545774.6038 << mtime the same
180428200919.01.log 23431 1524935545774.6038 << size changed
180428200919.01.log 23431 1524935545774.6038
180428200919.01.log 23431 1524935545774.6038

Может кто-нибудь объяснить это поведение и как его избежать? Может ли это произойти из-за того, что приложение writer не закрыло (должным образом) файл журнала?

...