在完整文件传输时观察文件更改

时间:2014-01-27 10:39:00

标签: node.js fs

我有一个简单的节点脚本,用于查找文件更改并使用ssh将文件复制到远程服务器。

fs.watch(filename,function(curr,prev){

//copy file to the remote server

});

但是,由于我正在观看的文件是通过ftp上传的,并且对于每一块数据我收到的文件都会被更改,并且回调会被触发。有没有办法只在传输完整文件时查找更改?

提前致谢。

3 个答案:

答案 0 :(得分:1)

对于Linux,您可以使用inotify binding module和IN_CLOSE_WRITE标志。该事件将告诉您以前打开要写入的文件的进程现在何时关闭文件描述符。

答案 1 :(得分:1)

我知道这是一个老问题,但对于同样情况下的其他人,现在有以下模块:

https://www.npmjs.com/package/remote-file-watcher

答案 2 :(得分:0)

我在Windows平台上遇到了同样的情况,最终做到了这一点:

try {
    var nRetries = 10; 
    var retryTimeInterval = 500
    var currentRetry = 0;
    var pollFunction = function(){
    try{
        var rootFolder = path.dirname(require.main.filename);
        var completePathToFile = path.resolve(rootFolder, filePath);
        fs.readFileSync(path.resolve(rootFolder, filePath));

        // do stuff with file here
    }
    catch(e){
        if (currentRetry < nRetries) {
            currentRetry += 1;
            setTimeout(pollFunction, retryTimeInterval);
        } 
    };
pollFunction();

文件必须在写入时被ftp服务器锁定(所以fs.readFileSync抛出)。

它不是很漂亮,但我没有找到任何其他方式。