栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

多年来,这个问题的答案已经改变。在 目前的 答案是在此间举行的顶部,然后用按时间顺序多年的各种答案:

当前答案

您可以使用

fs.existsSync()

const fs = require("fs"); // Or `import fs from "fs";` with ESMif (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()
    不再推荐使用。因此,您现在可以安全使用它。

2010年的原始答案:

您可以使用

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    }});

但是,如果您需要同步版本,则可以使用它。

2012年9月更新

下面几年前的答案现在有点过时了。当前的方法是用来

fs.existsSync
对文件/目录是否存在进行同步检查(或者当然
fs.exists
要进行异步检查),而不是
path
下面的版本。

例:

var fs = require('fs');if (fs.existsSync(path)) {    // Do something}// Orfs.exists(path, function(exists) {    if (exists) {        // Do something    }});

2015年2月更新

现在我们到了2015年,Node文档现在说

fs.existsSync
(和
fs.exists
)“将被弃用”。(因为Node员工认为在打开某个东西之前先检查是否存在某种东西是愚蠢的;但这并不是检查某个东西是否存在的唯一原因!)

因此,我们可能会回到各种

stat
方法…当然,除非/除非再次改变。

2015年12月更新

不知道它已经存在多久了,但是也有

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}// Orfs.access(path, fs.F_OK, function(err) {    if (!err) {        // Do something    } else {        // It isn't accessible    }});

2016年12月更新

您可以使用

fs.existsSync()

if (fs.existsSync(path)) {    // Do something}

它已被弃用了几年,但现在已不再使用。从文档:

请注意,

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



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/392093.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号