如何使用 node.js 同步检查文件或目录是否存在?
多年来,这个问题的答案已经改变。在 目前的 答案是在此间举行的顶部,然后用按时间顺序多年的各种答案:
您可以使用fs.existsSync()
:
const fs = require("fs"); // Or `import fs from "fs";` with ESM
if (fs.existsSync(path)) {
// Do something
}
它已被弃用了几年,但现在已不再使用。从文档:
请注意,
fs.exists()
不建议使用,但fs.existsSync()
不建议使用。(用于fs.exists()
接受与其他Node.js回调不一致的参数的回调参数。fs.existsSync()
不使用回调。)
您已经明确要求进行 同步 检查,但是如果您可以改用 异步 检查(通常最好使用I /
O),fs.promises.access
请在使用async
函数的情况下使用,否则fs.access
(由于exists
不赞成使用),请使用:
在async
函数中:
try {
await fs.promises.access("somefile");
// The check succeeded
} catch (error) {
// The check failed
}
或使用回调:
fs.access("somefile", error => {
if (!error) {
// The check succeeded
} else {
// The check failed
}
});
以下是按时间顺序排列的历史答案:
2010年的原始答案
(stat
/ statSync
或lstat
/ lstatSync
)
2012年9月更新
(exists
/ existsSync
)
2015年2月更新
(注意到即将弃用exists
/ existsSync
,因此我们很可能回到stat
/ statSync
或lstat
/
lstatSync
)
2015年12月更新
(还有fs.access(path, fs.F_OK, function(){})
/ fs.accessSync(path, fs.F_OK)
,但请注意,如果文件/目录不存在,则是一个错误;如果您需要在不打开的情况下检查是否存在,fs.stat
建议使用的文档fs.access
)
2016年12月更新
fs.exists()
仍不推荐使用,但fs.existsSync()
不再推荐使用。因此,您现在可以安全使用它。
您可以使用statSync
或lstatSync
(文档链接)为您提供一个fs.Stats
对象。通常,如果功能的同步版本可用,则其名称将与Sync
结尾的异步版本同名。所以,statSync
是的同步版本stat
;
lstatSync
是等的同步版本lstat
。
lstatSync
告诉您是否存在某些东西,如果存在,则告诉您是文件还是目录(或在某些文件系统中,是符号链接,块设备,字符设备等),例如,是否需要知道它是否存在以及是否存在目录:
var fs = require('fs');
try {
// Query the entry
stats = fs.lstatSync('/the/path');
// Is it a directory?
if (stats.isDirectory()) {
// Yes it is
}
}
catch (e) {
// ...
}
…同样,如果是文件,则为isFile
;
如果是块设备,则有isBlockDevice
,等等,等等。请注意try/catch
;如果条目根本不存在,则会引发错误。
如果您不在乎该条目
是
什么,而只想知道它是否存在,则可以使用user618408指出的
path.existsSync
(或使用最新的
fs.existsSync
):
var path = require('path');
if (path.existsSync("/the/path")) { // or fs.existsSync
// ...
}
它不需要a,try/catch
但不会为您提供任何有关事物的信息,只是它在那里。path.existsSync
很久以前不推荐使用。
旁注:您已经明确询问了如何 同步 检查,因此我使用了xyzSync
上述功能的版本。但是,只要有可能,使用I /
O最好避免同步调用。从CPU的角度来看,调用I /
O子系统要花费大量时间。请注意调用lstat
比lstatSync
:
// Is it a directory?
lstat('/the/path', function(err, stats) {
if (!err && stats.isDirectory()) {
// Yes it is
}
});
但是,如果您需要同步版本,则可以使用它。
下面几年前的答案现在有点过时了。当前的方法是用来fs.existsSync
对文件/目录是否存在进行同步检查(或者当然
fs.exists
要进行异步检查),而不是path
下面的版本。
例:
var fs = require('fs');
if (fs.existsSync(path)) {
// Do something
}
// Or
fs.exists(path, function(exists) {
if (exists) {
// Do something
}
});
现在我们到了2015年,Node文档现在说fs.existsSync
(和fs.exists
)“将被弃用”。(因为Node员工认为在打开某个东西之前先检查是否存在某种东西是愚蠢的;但这并不是检查某个东西是否存在的唯一原因!)
因此,我们可能会回到各种stat
方法…当然,除非/除非再次改变。
不知道它已经存在多久了,但是也有fs.access(path, fs.F_OK, ...)
/fs.accessSync(path, fs.F_OK)
。并且至少从2016年10月开始,该fs.stat
文档建议使用fs.access
做存在性检查(
“fs.access()
_建议先检查 _文件是否存在,然后再对其进行操作 。” )。但是请注意,访问不可用被认为是 错误
,因此,如果您期望文件可访问,则可能是最好的选择:
var fs = require('fs');
try {
fs.accessSync(path, fs.F_OK);
// Do something
} catch (e) {
// It isn't accessible
}
// Or
fs.access(path, fs.F_OK, function(err) {
if (!err) {
// Do something
} else {
// It isn't accessible
}
});
您可以使用fs.existsSync()
:
if (fs.existsSync(path)) {
// Do something
}
它已被弃用了几年,但现在已不再使用。从文档:
请注意,
fs.exists()
不建议使用,但fs.existsSync()
不建议使用。(用于fs.exists()
接受与其他Node.js回调不一致的参数的回调参数。fs.existsSync()
不使用回调。)
本文向大家介绍Node.js 检查文件或目录是否存在,包括了Node.js 检查文件或目录是否存在的使用技巧和注意事项,需要的朋友参考一下 示例 异步地 同步地 在这里,我们必须将函数调用包装在一个try/catch块中以处理错误。
问题内容: 如何检查 文件 的存在? 在模块的文档中,有方法的说明。但是,据我了解,它只检查目录的存在。而且我需要检查 文件 ! 如何才能做到这一点? 问题答案: 为什么不尝试打开文件? 无论如何,经过一分钟的搜索,请尝试以下操作: 对于Node.js v0.12.x及更高版本 双方并已弃用 *编辑: 已更改: 至: 林特抱怨双重等于不是三次等于。 使用fs.stat:
问题内容: 尝试检查我要读取的文件是否存在。 问题答案: 这是另一种方法: 包装的用途和功能: p_DirName in varchar2, – schema object name p_FileName in varchar2 ) return number is l_file_loc bfile; begin l_file_loc := bfilename(upper(p_DirName),
我想检查一个现有的文件是否在一个特定的目录或子目录中。
问题内容: 我想检查我的Go代码中文件的存在,但是我找不到一种好的方法。 我知道有一种Java中的File方法:如果文件或目录存在,则返回true。 但是如何在Go中完成呢? 问题答案: 编辑以添加错误处理。
问题内容: 我正在尝试检查给定目录中的特定文件。我不需要代码,但我想修复已有的代码。这个问题的唯一区别是,我正在寻找带有扩展名的文件。 我已经准备好代码:- 但是由于某些原因,它不起作用。我不明白为什么,有人可以在这里找到任何错误吗? 问题答案: 您希望temp.MOD文件位于当前目录(运行应用程序的目录)中,还是希望它位于“目录”文件夹中?在后一种情况下,尝试以这种方式创建文件: 还要检查文件权