【问题标题】:Watching for file changes on complete file transfer在完成文件传输时监视文件更改
【发布时间】:2014-01-27 10:39:00
【问题描述】:

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

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

//copy file to the remote server

});

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

提前致谢。

【问题讨论】:

    标签: node.js fs


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 抱歉回复晚了。我不知何故错过了您回答的通知。我会试试这个并恢复。干杯!
      【解决方案3】:

      我在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 会抛出)。

      不是很漂亮,但我没有找到其他方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-10
        • 1970-01-01
        • 2011-06-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多