为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

繁星点点滴滴 2019-07-13 16:40:05
如何同步检查,使用Node.js文件或目录是否存在?
查看完整描述

3 回答

?
MM们

TA贡献1886条经验 获得超2个赞

你可以用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代替检查(通常最好用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
    }});


查看完整回答
反对 回复 2019-07-13
?
白板的微信

TA贡献1883条经验 获得超3个赞

从源代码来看,有一个同步版本的path.exists - path.existsSync..好像是在医生那里漏掉的。

最新情况:

path.existspath.existsSync现在弃用

fs.existsfs.existsSync也有不受欢迎..使用fs.stat()fs.access()相反。


查看完整回答
反对 回复 2019-07-13
?
桃花长相依

TA贡献1860条经验 获得超8个赞

使用当前推荐的API(截至2015年)(根据节点文档),我所做的工作如下:

var fs = require('fs');function fileExists(filePath){
    try
    {
        return fs.statSync(filePath).isFile();
    }
    catch (err)
    {
        return false;
    }}

作为对EPERM问题的回应,@宽频在评论中提出了一个很好的观点。在许多情况下,fileExist()可能不是考虑这个问题的好方法,因为fileExist()不能真正保证布尔返回。您可以确定文件是否存在,但也可能会出现权限错误。权限错误并不一定意味着文件存在,因为您可能对包含正在检查的文件的目录缺乏权限。当然,在检查文件是否存在时可能会遇到其他错误。

所以我上面的代码确实是do FileExistAndDoIHaveAccessToit(),但是您的问题可能是do FileNotExistAndCouldICreateit(),这将是完全不同的逻辑(这需要考虑EPERM错误,等等)。

虽然fs.352 sSync的答案直接回答了这里提出的问题,但这往往不是您想要的问题(您不只是想知道路径上是否存在“某事”,您可能关心的是存在的“东西”是文件还是目录)。

底线是,如果您正在检查某个文件是否存在,您可能会这样做,因为您打算根据结果采取一些操作,并且这种逻辑(检查和/或后续操作)应该适应这样的想法,即在该路径上找到的东西可能是文件或目录,并且在检查过程中可能会遇到EPERM或其他错误。


查看完整回答
反对 回复 2019-07-13
  • 3 回答
  • 0 关注
  • 2787 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信