什么是使用Node.js检查文件是否存在的最佳实践?
在其他问题中,我看到很多答案说要使用
但文档中说:
特别是,在打开文件之前检查文件是否存在是一种反模式,会使您容易受到竞争条件的影响:另一个进程可能会在调用fs.exists()和fs.open()之间删除该文件。只需打开文件,并在找不到文件时处理错误。
当你打开一个文件时会发生什么?它会一直保持打开状态直到你关闭它吗(这是一种泄漏吗)?因此,你必须在打开文件后关闭它吗?如果我使用
这是否意味着检查文件是否存在的最佳方法是:
在其他问题中,我看到很多答案说要使用
fs.exists
。但文档中说:
特别是,在打开文件之前检查文件是否存在是一种反模式,会使您容易受到竞争条件的影响:另一个进程可能会在调用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
}
}
exists
的回调函数不像其他fs
回调函数那样接受错误。我曾经遇到过exists
导致错误的情况,而domain
是唯一可以捕获它们的方法。 - vkurchatkinexists
函数的代码后,我收回了之前说的话,它很可能不是由exists
函数引起的错误。exists
函数只是调用了stat
函数并检查了err
,所以你其实可以自己执行这个操作。 - vkurchatkin