javascript - NodeJS 检测修改过的文件

标签 javascript json node.js file checksum

应用加载用户的文本文件,每个文件都可以由用户更改。 在应用程序启动时,我想检查自上次以来是否更改了任何文件。 我认为最有效的方法是计算每个文件的校验和并保存到一个 json 文件中。 在应用程序启动时,我将检查每个文件校验和并将其与 json 文件中的数据进行比较 有没有更好/更有效的方法来做到这一点?或者如何准确计算文件校验和?

最佳答案

我相信使用 fs.stat 并检查“最后修改”比读取整个文件并比较校验和要快得多,因为它只是元数据(而且您实际上并没有读取整个文件)。

此外,如果您的文件位于不同的目录中,您可以测试文件夹是否已更改。这可以减少 I/O 调用(如果上次修改日期没有更改,您可以跳过检查该文件夹中的文件)。

您必须存储“最后修改”日期,为此我会使用 Redis。当然,您需要在每次修改更改和第一次运行时更新它。

这里有一个函数(和一个函数调用)来测试文件或文件夹是否被更改:

let fs = require('fs');
let moment = require('moment');

let path = 'views'; //your folder path (views is an example folder)
wasFileChanged(path, (err,wasChanged) => {
  if (wasChanged){
    console.log('folder was changed, need to compare files');
    //need to update redis here
    //...comapre files to find what was changed
  }
  else{
    console.log('folder was not changed');
  }
});

/**
 * Checks if a file/folder was changed 
 */
function wasFileChanged(path, callback) {
  fs.open(path, 'r', (err, fd) => {
    if (err) {
      return callback (err);
    } else {

      //obtain previous modified date of the folder (I would use redis to store/retrieve this data)
      let lastModifed = '2016-12-03T00:41:12Z'; //put the string value here, this is just example

      fs.stat(path, (err, data) => {
        console.log('check if file/folder last modified date, was it after my last check ');

        //I use moment module to compare dates
        let previousLMM = moment(lastModifed);
        let folderLMM = moment(data.mtime.toISOString());
        let res = !(folderLMM.isSame(previousLMM, 'second')); //seconds granularity
        return callback (null, res);
      });
    }
  });
}

关于javascript - NodeJS 检测修改过的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40942356/

相关文章:

javascript - 在 AngularJS 上读取 JSON

json - Bootstrap 表,空单元格中的破折号/连字符

node.js - 如何在 Mongoose Model.bulkWrite 操作期间获取字段值?

html - 无法将 css 样式表链接到 html

javascript - 解密由 crypto.pbkdf2 对象创建的密码

javascript - 我可以通过 javascript 在 Eloqua 中创建联系人吗?

javascript - 插入mongodb中的一系列文件

javascript - Array.push 不更新数组变量

javascript - Javascript 中使用的 JQuery MarginRight 和 CSS margin-right 有什么区别?

c# - 如何从 C# 中的 JSON 响应中删除反斜杠?