我看到Ken T.先前已经回答过这个问题,但是我有一个代码看起来有效的情况,并且对setxattr()的调用返回0,但是我要修改的项目不会改变。 / p>
具体来说,我正在尝试更改元数据属性kMDItemDisplayName,我的调用看起来像这样(以Ken T发布的样本为模型):
[注意:下面的“名称”参数是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属性作为文件名。
我是否需要询问Launch Services而不是xattr stuff?
答案 0 :(得分:3)
行。在更多地搜索并阅读更多Apple文档后,我意识到我需要做什么。我正在回答我自己的问题,希望这些信息对其他人有所帮助。
因为我必须编写自己的mdimporter来支持我的应用程序的文件格式,所以我想我会尝试在元数据导入时将kMDItemDisplay名称项添加到元数据存储。
令我惊讶和高兴的是,它第一次尝试就起作用了!
因此,答案是,如果要覆盖或添加自定义kMDItem *类型,可以使用Spotlight导入器在元数据导入时执行此操作。
希望有人发现这有用!