我正在阅读
stat
方法的手册 这里,其中写道:
因此,我有两个问题:在调用 fs.open()、fs.readFile() 或 fs.writeFile() 之前使用 fs.stat() 检查文件是否存在不是推荐的方式。相反,用户代码应该直接打开/读取/写入文件,并处理引发的错误,如果文件不可用。
要检查文件是否存在且不进行操作,请使用 fs.access()。
为什么使用错误处理程序比使用
fs.stat()
检查文件是否存在是首选方式?既然我可以使用
fs.access()
检查文件是否存在,那么使用错误处理程序
机制是否仍然是确保打开文件的首选方式?
因此,可能在调用 fs.open()、fs.readFile() 或 fs.writeFile() 之前使用 fs.access() 检查文件是否可访问不是推荐的方式。这样做会导致竞争条件,因为其他进程可能会在两次调用之间更改文件的状态。相反,用户代码应该直接打开/读取/写入文件,并处理引发的错误,如果文件无法访问。
fs.open()
会阻止其他进程访问文件,而 fs.stat()
和 fs.access()
只是请求信息,因此其他进程仍然可以更改/删除该文件。
fs.stat
/fs.access
检查文件后再打开它,则该文件可能会在此期间被删除/重命名。在这种情况下,您仍然需要处理打开错误。 - Bjarke Walling