我正在编写一个node.js程序,只要在特定目录中创建具有特定名称的文件,就需要执行某些操作。我可以通过重复调用fs.readdir直到我看到文件的名称来做到这一点,但我宁愿做一些更高效的事情。有谁知道这样做的方法?
答案 0 :(得分:5)
查看fs.watch
(和fs.watchFile作为后备)实现,但意识到它并不完美:
http://nodejs.org/api/fs.html#fs_fs_watch_filename_options_listener
注意事项#
fs.watch API在各个平台上并非100%一致,而且是 在某些情况下无法使用可用性#
此功能取决于提供的基础操作系统 通知文件系统更改的方法。
On Linux systems, this uses inotify. On BSD systems (including OS X), this uses kqueue. On SunOS systems (including Solaris and SmartOS), this uses event ports. On Windows systems, this feature depends on ReadDirectoryChangesW.
如果基础功能由于某种原因不可用,那么 fs.watch将无法运作。例如,观看文件或 网络文件系统(NFS,SMB等)上的目录通常不会 工作可靠或根本无法工作。
你仍然可以使用fs.watchFile,它使用stat轮询,但确实如此 慢,不太可靠。
答案 1 :(得分:1)
您基本上可以自己使用fs.watchFile
或fs.watchFile
或使用节点模块为您完成此操作,我强烈建议您使用节点模块。对于非错误的跨平台和快速解决方案,这可能很棘手。我建议使用chokidar或have a look at other modules执行此操作。
使用chokidar你可以这样做:
var chokidar = require('chokidar');
var watcher = chokidar.watch('YourDirecrtory');
watcher.on('add', function(path) {console.log('File', path, 'has been added');});
然后您不必关心边缘情况或跨平台支持。