【问题标题】:How can I get type from fs.Dirent?如何从 fs.Dirent 获取类型?
【发布时间】:2020-02-11 10:58:53
【问题描述】:

我可以打电话

fs.readdirSync("C:\\", { withFileTypes: true })

并获得fs.Dirent 的数组,但它们看起来像

> fs.readdirSync("C:\\", { withFileTypes: true })[32]
Dirent { name: 'Windows', [Symbol(type)]: 2 }
> fs.readdirSync("C:\\", { withFileTypes: true })[21]
Dirent { name: 'pagefile.sys', [Symbol(type)]: 1 }
> fs.readdirSync("C:\\", { withFileTypes: true })[10]
Dirent { name: 'Documents and Settings', [Symbol(type)]: 3 }

所以有一个名称和类型,但类型隐藏在 Symbol(type) 下,我找不到任何信息如何从那里获取它。

当然我可以使用类似的 hack

> x = fs.readdirSync("C:\\", { withFileTypes: true })[10]
Dirent { name: 'DoYourData iCloud Backup', [Symbol(type)]: 2 }
> x[Object.getOwnPropertySymbols(x)[0]]
3

但这似乎很奇怪。

如果它是故意隐藏的,除了名称之外没有任何公开,那么我不明白为什么我们在选项中有一个特殊的标志来获取一个对象而不是简单的字符串。

【问题讨论】:

    标签: javascript node.js fs


    【解决方案1】:

    它返回一个 Dirent (https://nodejs.org/api/fs.html#fs_class_fs_dirent)

    Dirent 允许你做这样的事情:

    const results = fs.readdirSync("c:\\temp", { withFileTypes: true });
    results.forEach(function(result) {
       console.log(result.name);
       console.log(` - isFile: ${result.isFile()}`);
       console.log(` - isDirectory: ${result.isDirectory()}`);
    });
    

    【讨论】:

      【解决方案2】:

      有用于特殊目的检查对象的方法。在文档中,它们紧跟在Dirent class 之后。

      以下是使用它们的示例:

      var methods = ['isBlockDevice', 'isCharacterDevice', 'isDirectory', 'isFIFO', 'isFile', 'isSocket', 'isSymbolicLink'];
      
      var res = fs.readdirSync("C:\\", { withFileTypes: true }).map(d => {
        var cur = { name: d.name }
        for (var method of methods) cur[method] = d[method]()
        return cur
      })
      
      console.table(res)
      

      【讨论】:

      • 究竟什么是“dirent”? fs.readdirSync 返回字符串、缓冲区或dirent...
      • @PrimitiveNom,对不起,我不明白你的问题。
      • 什么是dirent?只是一个对象?
      • 赞成只是为了展示console.table的使用;-p
      猜你喜欢
      • 2019-02-12
      • 2020-12-05
      • 2012-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多