Max*_*kyi 6 javascript node.js
我正在阅读这里的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()简单的请求信息和其他进程仍然可以修改/删除文件.
我认为这里应该明确的是,对于在打开文件之前检查文件可访问性的特定情况,不建议同时使用fs.stat和。正如问题中提到的,这可能会触发竞争条件。由于这个原因(以及其他一些与 API 相关的原因),函数和已被弃用(在版本 4 左右):它们经常被用于此目的。fs.accessexists()existsSync()
当试图打开文件时,如果文件无法访问,操作将触发错误。因此,此类检查应在此处进行。否则,有不止一种合理的方法来检查文件是否存在。
另请注意,从版本 6.8.0 开始,existsSync()已不再弃用!请参阅讨论和6.8.0 变更日志。上面的规则同样适用:仅当您以后不打算打开该文件时才使用它。
| 归档时间: |
|
| 查看次数: |
250 次 |
| 最近记录: |