同步检查Node.js中是否存在文件/目录

如何使用node.js同步检查文件或目录是否存在?

罗静云2020/03/13 17:49:04

如果您想知道某个文件是否存在,则有可能需要它。

function getFile(path){
    try{
        return require(path);
    }catch(e){
        return false;
    }
}
老丝Tom2020/03/13 17:49:04

如果您不打算操纵文件,则上面的文件fs.stat()说要使用fs.access()它没有给出理由,是更快还是更少的内存使用?

我将节点用于线性自动化,因此我认为我可以共享用于测试文件是否存在的功能。

var fs = require("fs");

function exists(path){
    //Remember file access time will slow your program.
    try{
        fs.accessSync(path);
    } catch (err){
        return false;
    }
    return true;
}
路易逆天2020/03/13 17:49:04

这里有一些答案,fs.exists并且fs.existsSync都已弃用。根据文档,这不再是真的。fs.exists现在受尊重:

请注意,不建议使用fs.exists(),但不建议使用fs.existsSync()。(fs.exists()的回调参数接受与其他Node.js回调不一致的参数。fs.existsSync()不使用回调。)

因此,您可以安全地使用fs.existsSync()来同步检查文件是否存在。

王者一打九银2020/03/13 17:49:04

path模块不提供的同步版本,path.exists因此您必须尝试使用​​该fs模块。

我能想象的最快的方法是使用fs.realpathSync它将引发必须捕获的错误,因此您需要使用try / catch来创建自己的包装函数。

GilPro2020/03/13 17:49:04

从源代码上看,有一个同步版本path.exists- path.existsSync看起来它在文档中被遗漏了。

更新:

path.exists并且path.existsSync现在已弃用请使用fs.existsfs.existsSync

2016年更新:

fs.exists 并且fs.existsSync 已被弃用请改用fs.stat()fs.access()

更新2019:

使用fs.existsSync它不被弃用。 https://nodejs.org/api/fs.html#fs_fs_existssync_path

ALPro2020/03/13 17:49:04

另一个更新

我本人需要查找此节点文档,因此需要我自己对此问题的答案,似乎您应该使用fs.exists,而应使用fs.open并使用输出的错误来检测文件是否不存在:

从文档:

fs.exists()是过时的,仅出于历史原因存在。几乎永远没有理由在自己的代码中使用它。

特别是,在打开文件之前检查文件是否存在是一种反模式,使您容易遭受竞争状况的影响:另一个过程可能会在调用fs.exists()和fs.open()之间删除该文件。只需打开文件并处理不存在的错误。

http://nodejs.org/api/fs.html#fs_fs_exists_path_callback