0

我有一个目录,其他一些程序在其中编写完成后我必须处理的 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)是在有新文件没有被写锁定时得到通知。

4

2 回答 2

1

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

也许使用incrontab可能是值得的。

于 2013-09-05T07:22:50.487 回答
0

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

mybigfile.txt
mybigfile.txt.done

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

于 2013-09-05T08:13:28.787 回答