【问题标题】:Identify File Type When File Extensions Are Hidden隐藏文件扩展名时识别文件类型
【发布时间】:2020-04-22 12:21:33
【问题描述】:

识别任何给定文件类型的正确方法是什么?

只要启用了显示文件扩展名的选项,我知道有几种方法可以做到这一点,它们几乎是相同的。

path.substring(path.lastIndexOf('.')+1)

const path = require('path')
path.extname(string)

但是如果有人禁用了显示文件扩展名的选项怎么办。在这种情况下,理想情况下以跨平台方式,我如何识别任何给定文件的文件类型?

【问题讨论】:

  • 你想要类似unix命令file的东西吗?
  • @Macabeus 我只想能够识别任何给定文件的文件类型,最好是跨平台方式
  • 我认为禁用文件扩展名适用于Windows文件资源管理器并且用于查看那里的文件。显然这些文件仍然有它们的扩展名,所以我一直认为对目录 的任何编程读取都会显示文件的全名。但我从来没有真正尝试过。
  • @VLAZ 我只是假设您可以禁用在其他操作系统中显示文件扩展名,因为您可以在 Windows 中执行此操作,哈哈。我不太确定在隐藏扩展名时是否仍然可以检索文件名。我现在就测试一下
  • 当您说“类型”时,我假设您的意思是“文件名中最后一个点之后的部分”——无论用户的 Windows 资源管理器设置如何,它都会出现。

标签: javascript node.js file path fs


【解决方案1】:

当您说“类型”时,我假设您的意思是“文件名中最后一个点之后的部分”——无论用户的 Windows 资源管理器设置如何,它都会出现。

【讨论】:

    【解决方案2】:

    也许有更好的方法,但我只能想到这个解决方案。

    const { execSync } = require('child_process');
    
    let output = execSync('file ~/textFile')
      .toString()
    
    console.log(output) // will print '/Users/macabeus/textFile: ASCII text'
    

    这仅适用于 Unix 系统,因此您需要在 Windows 中使用 WSL。

    【讨论】:

    • 请注意 - 这仅适用于基于 Linux/Unix 的操作系统。我想所有人都会有file,但不确定——也许 OSX 或某些 Linux 发行版没有。
    • 谢谢。但是如果用户没有安装/启用 WSL 怎么办??
    • @Macabeus 在 Windows 中的 type 不等于在 *NIX 中的 cat
    • 是的。我很困惑。嗯...我找不到适用于 Windows 的等价物...
    • @Macabeus 我认为有一些 PowerShell cmdlet 可以执行类似的操作,但我的 PS 技能非常低。我认为在大多数情况下,检查扩展名是识别文件的足够安全的方法 - file,但很多时候它是矫枉过正的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-02
    • 2013-12-19
    • 2011-02-19
    • 1970-01-01
    • 2014-03-29
    • 1970-01-01
    相关资源
    最近更新 更多