gpt4 book ai didi

javascript - 从 node.js 检测文件内容更改

转载 作者:行者123 更新时间:2023-11-30 12:12:53 24 4
gpt4 key购买 nike

我用 chokidar 构建了一个简单的文件观察器

require('chokidar').watch('./target.txt', {}).on('all', function(event, path) {
console.log(event, path);
}).on('ready', function() {
console.log('ready');
});

每次我重新保存文件时,即使没有更改,它也会导致 change 事件。有没有办法只在实际内容已更改时才触发此事件?

最佳答案

您可以使用在addchange 上传递的stats 参数。这仅适用于文件大小的更改,这对于绝大多数情况应该足够了。

   var watchSize = 0;

require('chokidar').watch('./target.txt', {}).on('all', function(event, path, stats) {

if(stats && stats.size != watchSize) {
watchSize = stats.size;
console.log(event);
}
}).on('ready', function(path, stats) {
console.log('ready');
});

如果剩下的几种情况确实与您的案例相关,并且您不担心性能问题,您可以使用类似这样的东西(按照评论中的建议):

var crypto   = require("crypto");
var fs = require("fs");
var chokidar = require("chokidar");

watchFile("./target.txt");

//----------------------------------------------------
function watchFile(filePath){

var watchHash;

chokidar.watch(filePath, {}).on("all", function(event, path, stats) {

if (event == "add" || event == "change"){

getHash(filePath, function(hash){
if (hash != watchHash){
watchHash = hash;
console.log(event);
}
});
}
});
}

//----------------------------------------------------
function getHash(filePath, callback){

var stream = fs.ReadStream(filePath);
var md5sum = crypto.createHash("md5");

stream.on("data", function(data) {
md5sum.update(data);
});

stream.on("end", function() {
callback(md5sum.digest("hex"));
});
}

虽然这看起来有点多。

关于javascript - 从 node.js 检测文件内容更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33279267/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com