【问题标题】:Node JS - read file propertiesNode JS - 读取文件属性
【发布时间】:2015-09-17 21:20:38
【问题描述】:

我正在使用 NWJS 开发桌面应用程序,我需要获取 .exe 文件的文件属性。

我尝试使用 npm 属性模块 https://github.com/gagle/node-properties,但我得到一个空对象。

properties.parse('./unzipped/File.exe', { path: true }, function (err, obj) {
            if (err) {
                console.log(err);
            }

            console.log(obj);
        });

我需要获取“文件版本”属性:

我也尝试过使用 fs.stats,但没有运气。 有什么想法吗?

【问题讨论】:

标签: node.js node-webkit file-properties


【解决方案1】:

除非你想写一些原生的 C 模块,否则有一种简单的方法可以轻松完成:使用 windows wmic 命令。这是获取版本的命令(通过谷歌搜索找到):

wmic datafile where name='c:\\windows\\system32\\notepad.exe' get Version

所以你可以在节点中运行这个命令来完成工作:

var exec = require('child_process').exec

exec('wmic datafile where name="c:\\\\windows\\\\system32\\\\notepad.exe" get Version', function(err,stdout, stderr){
 if(!err){
   console.log(stdout)// parse this string for version
 }
});

【讨论】:

  • $ wmic datafile where name="C:\Development\nwjs\sistelupdater\unzipped\StaClient.exe" 获取版本节点 - USUARIO-PC 错误:描述 = 无效查询
  • 使用双 '\\' 作为路径分隔符。我也不熟悉这个命令。详情请用谷歌搜索
  • 我也使用了双重反冲......但仍然
  • 好的,由于某种原因,它可以在 cmd 控制台上运行...但不能从任何其他控制台运行,也不能从节点运行
  • 在节点中,你使用了 4 '\' 吗?
【解决方案2】:

如果您希望将属性作为对象提供,您可以使用get-file-properties。它在后台使用wmic,但负责将输出解析为易于使用的类型化对象以供您的应用程序使用。

import { getFileProperties, WmicDataObject } from 'get-file-properties'

async function demo() {
  // Make sure to use double backslashes in your file path
  const metadata: WmicDataObject = await getFileProperties('C:\\path\\to\\file.txt')
  console.log(metadata.Version)
}

免责声明:我是get-file-properties的作者

【讨论】:

  • 在节点 js 中为我工作。这可以在 Linux 上运行吗?
  • @NyagakaEnock 据我所知,这在 Linux 中是不需要的,因为 Node 的原生 fs.stat() 将获得 Linux 中可用的任何文件属性。我可能是错的,但我已经挖掘并没有发现任何真正明确的等同于 WMIC.exe 为 Windows 中的文件或 macOS 上的 mdls 提取的数据。我希望为 get-file-properties 模块添加跨平台支持,只是还没来得及。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-23
  • 2016-03-14
  • 2018-07-12
  • 2012-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多