如何使用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()之间删除该文件。只需打开文件并处理不存在的错误。
如果您想知道某个文件是否存在,则有可能需要它。