我有这个节点js代码来监视文件的变化。
fsmonitor = require('fsmonitor');
fsmonitor.watch('path\to\files', null, function(change) {
console.log("Change detected:\n" + change);
console.log("Added files: %j", change.addedFiles);
console.log("Modified files: %j", change.modifiedFiles);
console.log("Removed files: %j", change.removedFiles);
console.log("Added folders: %j", change.addedFolders);
console.log("Modified folders: %j", change.modifiedFolders);
console.log("Removed folders: %j", change.removedFolders);
});
var monitor = fsmonitor.watch('.', {
// include files
matches: function(relpath) {
return relpath.match(/\.js$/i) !== null;
},
// exclude directories
excludes: function(relpath) {
return relpath.match(/^\.git$/i) !== null;
}
});
monitor.on('change', function(changes) {
console.log(changes);
});
但是,如果我复制一个1GB的文件(复制需要一些时间),它会在我复制它并完成复制时触发更改。如何仅在完全复制完成后才能通知更改?
答案 0 :(得分:1)
怎么样?
monitor.on('complete', function(changes) {
console.log(changes);
});
查看源代码(https://github.com/andreyvit/fsmonitor.js/blob/master/lib/monitor.iced),检查第14行。
@tree.once 'complete', @_finishInitialization.bind(@)
不确定是否会这样做,但这是我的第一次猜测。
更新:
我会这样做。
使用fsmonitor.js repo指向的https://github.com/paulmillr/chokidar作为更好的选择。阅读awaitWriteFinish
上的文档。这似乎更符合您的要求。