如何在Node.js中检查文件是否已打开/正在写入?

5

我找到了很多关于C++、C#等的答案,但还没有找到Node.js的答案。这是我的情况。

我创建了一个模块,用于监视FTP服务器中文件/目录的更改(新建或更新,不关心已删除的文件)。一旦我注意到有新文件或现有文件被更改,我会收到通知并通知我的B模块将此文件同步到Sourceforge.net。该模块运行良好,对更改作出及时反应。

但我仍不满意的是,在添加新文件时,该文件会接收到“已修改”事件多次,具体取决于文件大小:文件越大,它将接收到越多的“已修改”fs.watch事件。这是因为在文件正在上传时,操作系统定期将已上传的缓冲区刷新到文件系统中,从而导致多个“已修改”事件。

问题

如何检查文件是否仍处于打开状态,以便我知道“已修改”事件实际上是因为剩余数据被刷新而发生的,而不是因为文件已多次更改,这样我就可以忽略它?"

一旦文件关闭或写入停止,我就可以通知我的B模块同步到SF.net。

任何想法都将不胜感激。谢谢。

1个回答

4
你可以考虑设置一个超时时间,然后重新检查文件以确保大小和修改时间未更改。如果它们没有更改,则假定上传已完成并将文件传输到SF.net。
另一个选择是基于你找到的c解决方案创建一个本地的节点模块;
一些信息; 使用Node.js本机模块入门 但使用node-gyp而不是node-waf

https://github.com/TooTallNate/node-gyp


谢谢您的建议。也许我会使用超时来检查这个问题。 - esengineer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接