NodeJS-读取macOS .plist文件

时间:2018-08-10 09:45:09

标签: node.js macos electron

我的Mac上有一个.plist文件,我想阅读。我可以使用Xcode轻松打开它,但想使用NodeJS来打开它。

我找到了plist包,我正试图像这样使用它:

import fs from 'fs';
import plist from 'plist';

fs.readFile('/my/path/here.plist', 'utf-8', (err, data) => {
  console.log('#data', data);
  const obj = plist.parse(data);
  console.log('#obj', obj);
});

data的含义如下(该文件的一部分)

dataYdisplayasZfile-label]file-mod-date[arrangement_preferreditemsize��-   O(book(0$Usersnyc    Downloads �i(�   +� HXhA���L�  file:///Macintosh

plist包抛出错误,因为我猜它期望XML格式的字符串。

如何读取这样的.plist文件?

2 个答案:

答案 0 :(得分:1)

好,找到解决方案。猜猜发布到SO可以让我在谷歌搜索上有更多的运气...

macOS .plist文件大多数为二进制文件。有一个命令plutil可以将二进制文件转换为xml,因此在节点中必须执行以下操作:

import { exec } from 'child_process';

const command = 'plutil -convert xml1 ./path/to/binary/file.plist';
exec(command, callback); // Here you gonna convert this file to plain `xml`.

然后,您只需要从上面重复我的步骤-使用fs.readFile读取文件,然后使用plist包进行转换,以便获得一个不错的JS对象。

希望这对某人有帮助!

答案 1 :(得分:1)

我建议使用适当的库,例如bplist-parser(只读)或simple-plist(读写,包装bplist-parser和bplist-creator,还处理纯文本plist) child_process模块的使用。不要忘记exec需要特别注意(例如,转义参数),并且使用它很容易使自己陷入困境!

import { parseFile } from 'bplist-parser';

parseFile('./path/to/binary/file.plist', callback);