首页 > 解决方案 > 为什么 NodeJS fs.stat() 在文件更改时不更新 file.mtime?

问题描述

我有一个简单的脚本来查看文件统计信息,如下所示:

比如说,我每 2 秒运行一次 fs.stat 并寻找结果的变化。其他应用程序可以随时写入文件。Ans 当它发生时,我看到大小发生了变化,但 mtime 保持不变。

环境:Windows10 / NodeJS v8.10.0

脚本示例:

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-app 没有关闭(正确)日志文件吗?

标签: javascriptnode.jsfilesystemsntfs

解决方案


推荐阅读