【问题标题】:Node.js best practice check for file existsNode.js 最佳实践检查文件是否存在
【发布时间】:2014-05-24 10:06:04
【问题描述】:

使用 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
    }
}

【问题讨论】:

    标签: node.js


    【解决方案1】:

    打开文件时发生了什么?它会一直打开直到你关闭它(这是泄漏吗?)?

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

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

    仅仅调用fs.exists() 不会打开文件,所以没有什么可以关闭的。

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

    【讨论】:

    • 在文档中还说:fs.exists() 是不合时宜的,仅出于历史原因而存在。这有什么好担心的吗?
    • @Klaasvaak 我不会担心的。当然,您可能需要检查文件是否存在......再次,我认为他们试图在打开文件之前警告人们在不需要时使用它。
    • @Klaasvaak 有一点需要担心:正如您所见,exists 的回调不像其他 fs 回调那样接受错误。我遇到过exists 导致错误的情况,而domain 是捕获它们的唯一方法
    • @vkurchatkin 能告诉我是什么情况吗?
    • @Klaasvaak 在查看了exists 的代码后,我收回我的话,这可能不是exists 错误。 exists 只需调用 stat 并检查 err,因此您实际上可以自己执行此操作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-28
    • 1970-01-01
    • 2013-07-15
    • 1970-01-01
    • 2013-08-15
    • 2010-10-27
    相关资源
    最近更新 更多