我正在阅读这里的stat方法手册,它说:
在调用fs.open()之前使用fs.stat()检查文件是否存在,建议不要使用fs.readFile()或fs.writeFile().相反,用户代码应直接打开/读取/写入文件,并在文件不可用时处理引发的错误.
要检查文件是否存在而不事后对其进行操作,建议使用fs.access().
所以,我有两个问题:
为什么使用错误处理程序是fs.stat()检查文件存在的首选方法?
而且由于我可以fs.access()用来检查文件是否存在,是否使用error handler机制仍然是首选的方式来确保文件是打开的?
我想我找到了第二个问题的答案:
在调用fs.open()之前,使用fs.access()检查文件的可访问性,不建议使用fs.readFile()或fs.writeFile().这样做会引入竞争条件,因为其他进程可能会在两次调用之间更改文件的状态.相反,用户代码应该直接打开/读取/写入文件,并处理在文件无法访问时引发的错误.
因此,可能fs.open()阻止文件的其他进程,而fs.stat()与fs.access()简单的请求信息和其他进程仍然可以修改/删除文件.