如何使用node.js同步检查文件或目录是否存在?
同步检查Node.js中是否存在文件/目录
如果您不打算操纵文件,则上面的文件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;
}
这里有一些答案,fs.exists并且fs.existsSync都已弃用。根据文档,这不再是真的。fs.exists现在仅受尊重:
请注意,不建议使用fs.exists(),但不建议使用fs.existsSync()。(fs.exists()的回调参数接受与其他Node.js回调不一致的参数。fs.existsSync()不使用回调。)
因此,您可以安全地使用fs.existsSync()来同步检查文件是否存在。
该path模块不提供的同步版本,path.exists因此您必须尝试使用该fs模块。
我能想象的最快的方法是使用fs.realpathSync它将引发必须捕获的错误,因此您需要使用try / catch来创建自己的包装函数。
从源代码上看,有一个同步版本path.exists- path.existsSync。看起来它在文档中被遗漏了。
更新:
path.exists并且path.existsSync现在已弃用。请使用。fs.exists和fs.existsSync
2016年更新:
fs.exists 并且 已被弃用。请改用fs.stat()或fs.access()。fs.existsSync也
更新2019:
使用fs.existsSync。它不被弃用。
https://nodejs.org/api/fs.html#fs_fs_existssync_path
另一个更新
我本人需要查找此节点文档,因此需要我自己对此问题的答案,似乎您不应该使用fs.exists,而应使用fs.open并使用输出的错误来检测文件是否不存在:
从文档:
fs.exists()是过时的,仅出于历史原因存在。几乎永远没有理由在自己的代码中使用它。
特别是,在打开文件之前检查文件是否存在是一种反模式,使您容易遭受竞争状况的影响:另一个过程可能会在调用fs.exists()和fs.open()之间删除该文件。只需打开文件并处理不存在的错误。
如果您想知道某个文件是否存在,则有可能需要它。