【发布时间】:2013-09-05 16:13:28
【问题描述】:
我有一个目录,其他一些程序在其中编写 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)是在有新文件未被写入锁定时得到通知。
【问题讨论】:
-
Linux 不会隐式写锁定文件。如果您希望发生锁定,请明确使用
flock或lockf。特别是,两个进程可以同时写入同一个文件(即使这不是可取的)。
标签: javascript linux windows node.js watch