在完成文件传输时观察文件更改
我有一个简单的节点脚本,用于查找文件更改并使用ssh将文件复制到远程服务器。
fs.watch(filename,function(curr,prev){ //copy file to the remote server });
但是,由于我正在观看的文件是通过ftp
上传的,我接收到的每一个数据块都会被修改,callback被触发。 只有当完整的文件被传输时,有什么方法才能查找更改?
提前致谢。
我知道这是一个古老的问题,但对于同样情况下的其他人现在有下面的模块:
对于Linux,您可能会使用inotify绑定模块和IN_CLOSE_WRITE标志。 那个事件会告诉你什么时候一个以前打开文件进行写入的进程现在已经closures了文件描述符。
我在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服务器locking(所以fs.readFileSync抛出)。
这不是很漂亮,但我没有find任何其他的方式。