我看到 Ken T. 之前已经回答过这个问题,但我遇到了一种情况,代码似乎可以工作,并且对 setxattr() 的调用返回 0,但我要修改的项目没有更改。
具体来说,我正在尝试更改元数据属性 kMDItemDisplayName,我的调用如下所示(根据 Ken T 发布的示例建模):
[注意:下面的“name”参数是一个 NSString *]
rc = setxattr([pathString cStringUsingEncoding:NSUTF8StringEncoding],
"kMDItemDisplayName",
[name cStringUsingEncoding:NSUTF8StringEncoding],
[name lengthOfBytesUsingEncoding:NSUTF8StringEncoding],
0,
0);
对相关文件执行 mdls 显示 kMDItemDisplayName 属性存在,但我无法将其更改为实际文件名以外的任何内容(我认为这是默认行为)。
我是否误解了 setxattr() 的工作原理?
非常感谢任何帮助。
哦,顺便说一句,我为什么要这样做?看起来(通过检查 Bare Bones 的 Yojimbo 的工作方式)Spotlight 使用 kMDItemDisplayName 值在查找器的 Spotlight 搜索结果菜单中列出文件,这是我想在我的应用程序中实现的功能。
谢谢!
Heyyyy...等一下...
从命令行,执行 xattr -l 显示,据 xattr 所知,有一个名为 kMDItemDisplayName 的属性,这就是我设置的...但是,同一文件上的 mdls 仍然显示 kMDItemDisplayName属性作为文件名。
我需要询问启动服务而不是xattr 的东西吗?
最佳答案
好的。经过更多的搜索和阅读更多的苹果文档后,我意识到我需要做什么。我正在回答我自己的问题,希望这些信息对其他人有帮助。
因为我必须编写自己的 mdimporter 来支持我的应用程序的文件格式,所以我想尝试在元数据导入时将 kMDItemDisplay 名称项添加到元数据存储中。
令我惊讶和高兴的是,第一次尝试就成功了!
所以,答案是,如果您想要覆盖或添加自定义 kMDItem* 类型,您可以在元数据导入时使用 Spotlight 导入器来执行此操作。
希望有人觉得这有帮助!
关于macos - 将 Spotlight 元数据写入 OS X 上的文件(特别是 kMDItemDisplayName),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13597668/