仅在文件复制完成时通知:节点js

时间:2018-03-02 01:07:14

标签: node.js

我有这个节点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的文件(复制需要一些时间),它会在我复制它并完成复制时触发更改。如何仅在完全复制完成后才能通知更改?

1 个答案:

答案 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上的文档。这似乎更符合您的要求。