2014-01-27 66 views
1

文件的变化,我有一个简单的节点脚本查找文件修改和拷贝文件到使用ssh远程服务器。留意上完成文件传输

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

//copy file to the remote server 

}); 

然而,由于我看的文件是通过ftp和每一个数据块上传我收到的文件被改变,回调被炒鱿鱼。只有在完整文件被传输后才有任何方法查找更改?

在此先感谢。

回答

0

对于Linux,你也许可以用inotify binding module和IN_CLOSE_WRITE标志度日。那个事件会告诉你什么时候一个先前打开文件进行写入的进程现在已经关闭了文件描述符。

+0

很抱歉这么晚才回复。我不知何故错过了你的答案通知。我会尝试这个并恢复。干杯! –

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抛出)被锁定。

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