Node.js 检查路径是文件还是目录

新手上路,请多包涵

我似乎无法获得任何解释如何执行此操作的搜索结果。

我想要做的就是能够知道给定路径是文件还是目录(文件夹)。

原文由 ThomasReggi 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.5k
2 个回答

下面应该告诉你。从 文档

 fs.lstatSync(path_string).isDirectory()

从 fs.stat() 和 fs.lstat() 返回的对象属于这种类型。

 stats.isFile()
stats.isDirectory()
stats.isBlockDevice()
stats.isCharacterDevice()
stats.isSymbolicLink() // (only valid with fs.lstat())
stats.isFIFO()
stats.isSocket()

笔记:

上述解决方案throw 一个 Error 如果;例如, filedirectory 不存在。

如果您想要 truefalse 方法,请尝试 fs.existsSync(dirPath) && fs.lstatSync(dirPath).isDirectory(); 正如约瑟夫在下面的评论中提到的那样。

原文由 Jason Sperske 发布,翻译遵循 CC BY-SA 4.0 许可协议

更新:Node.Js >= 10

我们可以使用新的 fs.promises API

 const fs = require('fs').promises;

(async() => {
    const stat = await fs.lstat('test.txt');
    console.log(stat.isFile());
})().catch(console.error)


任何 Node.Js 版本

这是 异步 检测路径是文件还是目录的方法,这是 node.js 中推荐的方法。使用 fs.lstat

 const fs = require("fs");

let path = "/path/to/something";

fs.lstat(path, (err, stats) => {

    if(err)
        return console.log(err); //Handle error

    console.log(`Is file: ${stats.isFile()}`);
    console.log(`Is directory: ${stats.isDirectory()}`);
    console.log(`Is symbolic link: ${stats.isSymbolicLink()}`);
    console.log(`Is FIFO: ${stats.isFIFO()}`);
    console.log(`Is socket: ${stats.isSocket()}`);
    console.log(`Is character device: ${stats.isCharacterDevice()}`);
    console.log(`Is block device: ${stats.isBlockDevice()}`);
});


使用同步 API 时注意:

使用同步形式时,会立即抛出任何异常。您可以使用 try/catch 来处理异常或允许它们冒泡。

 try{
     fs.lstatSync("/some/path").isDirectory()
}catch(e){
   // Handle error
   if(e.code == 'ENOENT'){
     //no such file or directory
     //do something
   }else {
     //do something else
   }
}

原文由 Marcos Casagrande 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题