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

如何同步检查,使用Node.js文件或目录是否存在?



繁星点点滴滴
浏览 2788回答 3
3回答

MM们

你可以用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     }});

白板的微信

从源代码来看,有一个同步版本的path.exists - path.existsSync..好像是在医生那里漏掉的。最新情况:path.exists和path.existsSync现在弃用. fs.exists和fs.existsSync也有不受欢迎..使用fs.stat()或fs.access()相反。

桃花长相依

使用当前推荐的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或其他错误。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Node.js