我试图找到一种方法来更改文件的元数据属性(那些前缀为“kMDItem”的,由 列出mdls
),但我没有找到任何解决方案。时间
起初,我尝试过使用FileManager.default.setAttributes(_attributes:ofItemAtPath:)
,但这种方法只给了我几个选项,它只给了我修改文件的能力modification date
,creation date
等等posix permissions
,这还不够。
然后,我尝试使用NSMetadataItem
withsetValue(_value:forKey:)
函数来更改元数据值,这是我的代码:
var attributes = NSMetadataItem(url: URL(fileURLWithPath: "/path/to/file")
if let metadata = attributes {
metadata.setValue(newValue, forKey: kMDItemDisplayName as String)
metadata.setValue(newValue, forKey: NSMetadataItemDisplayNameKey)
// I've tried both of them from above (different keys), they both does not work at all
}
我注意到setValue(_value:forKey:)
通过反复得到这个返回错误在这里没有做任何事情:error: Execution was interrupted, reason: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)
。
最后,我在 StackOverflow 上红了这篇文章,这导致了我的这段代码:
_ = setxattr("/path/to/file".cString(using: .utf8), "kMDItemDisplayName", newValue.cString(using: .utf8), newValue.lengthOfBytes(using: .utf8), 0, 0)
执行后,我用mdls
andxattr -l
查看结果,发现这只是给文件添加扩展属性的解决方案,元数据没有改变,只是成功添加了名称为“kMDItemDisplayName”的扩展属性。
结果不是我想要的(我只是使用 kMDItemDisplayName 作为我的问题的示例),我不只是想找到一种将扩展属性添加到文件的方法,而是一种编辑列出的属性的方法mdls
。也许没有解决方案?或者也许我应该以完全不同的方式来做?