检查Node.js文件是否存在的最佳做法是什么?
在这里的其他问题中,我看到很多答案都说使用fs.exists
但是docs说:
特别是,在打开文件之前检查文件是否存在是一种反模式,使您容易受到竞争条件的影响:另一个进程可能会在调用fs.exists()和fs.open()之间删除该文件。只需打开文件并在错误处理时处理错误。
打开文件时会发生什么?它是否保持开放状态,直到你关闭它(这是泄漏吗?)?那么,打开后你必须关闭文件吗?如果我使用fs.exists
,我也会打开文件吗?
这是否意味着检查文件是否存在的最佳方法是:
fs.open('path/file.js', function(err, fd) {
if (err && err.code == 'ENOENT') {
// Does not exist
} else if (!err) {
// Does exist
fs.close(fd);
} else {
// Some other error
}
}
答案 0 :(得分:3)
打开文件时会发生什么?它是否保持开放状态,直到你关闭它(这是泄漏吗?)?
是的,如果您打开文件,则必须将其关闭。否则它将保持打开状态,直到您的过程终止。
如果我使用fs.exists,我也会打开文件吗?
简单地调用fs.exists()
不会打开文件,因此无法关闭。
如果您有理由仅检查文件是否存在,则应使用fs.exists()
。文档说如果您真正想要做的是打开文件,则无需事先检查fs.exists()
。如果要打开文件,只需尝试打开它并处理错误。