我有一个目录,其他一些程序编写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)。
答案 0 :(得分:1)
在Linux上,您可以使用inotify工具。请参阅inotify(7)。
使用incrontab可能是值得的。
答案 1 :(得分:0)
处理此问题的一种方法是使用在主文件完成后写入的零字节“信号文件”。例如
mybigfile.txt
mybigfile.txt.done
“.done”文件长度为0个字节,在完成写入数据文件后由“触摸”或类似过程创建。您扫描.done文件,如果丢失则不执行任何操作。不幸的是,你暗示你无法控制写作过程,所以这可能不是你可以使用的解决方案。