观察目录并尽快处理完整的新文件

时间:2013-09-05 07:09:17

标签: javascript linux windows node.js watch

我有一个目录,其他一些程序编写XML文件,我必须在完成后处理。

到目前为止,我通过要求编写程序首先使用临时名称并且仅在最后重命名".xml"中的文件来避免处理未完成的文件。我的代码如下所示:

var fs  = require("fs");
var handleFiles = function(){
    fs.readdirSync(args.in).forEach(function(filename) {
        if (filename.slice(-4)!=='.xml') return;
        // handle XML file here
    });
}
fs.watch(args.in, handleFiles);

但我必须支持的一些新程序无法使用临时名称编写。

如果文件完全用高效,可靠的跨浏览器(windows& linux)编写而不是基于超时(即不会每10毫秒测试一次重命名直到它工作),我怎样才能确保我处理这些文件方式?

编写操作是一次性的,所以我猜想当有新文件没有被写入锁定时,我想要的是(对于linux,更重要的是对于windows)。

2 个答案:

答案 0 :(得分:1)

在Linux上,您可以使用inotify工具。请参阅inotify(7)

使用incrontab可能是值得的。

答案 1 :(得分:0)

处理此问题的一种方法是使用在主文件完成后写入的零字节“信号文件”。例如

mybigfile.txt
mybigfile.txt.done

“.done”文件长度为0个字节,在完成写入数据文件后由“触摸”或类似过程创建。您扫描.done文件,如果丢失则不执行任何操作。不幸的是,你暗示你无法控制写作过程,所以这可能不是你可以使用的解决方案。