Node.js存在最佳实践检查文件

时间:2014-04-10 15:31:21

标签: node.js

检查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
    }
}

1 个答案:

答案 0 :(得分:3)

  

打开文件时会发生什么?它是否保持开放状态,直到你关闭它(这是泄漏吗?)?

是的,如果您打开文件,则必须将其关闭。否则它将保持打开状态,直到您的过程终止。

  

如果我使用fs.exists,我也会打开文件吗?

简单地调用fs.exists()不会打开文件,因此无法关闭。

如果您有理由仅检查文件是否存在,则应使用fs.exists()。文档说如果您真正想要做的是打开文件,则无需事先检查fs.exists()。如果要打开文件,只需尝试打开它并处理错误。