gpt4 book ai didi

Swift - 如何修改 kMDItemDisplayName 等文件元数据?

转载 作者:行者123 更新时间:2023-11-28 13:50:25 26 4
gpt4 key购买 nike

我试图找到一种方法来更改文件的元数据属性(那些前缀为“kMDItem”的属性,由 mdls 列出),但我没有找到任何解决方案。总计

起初,我试过使用 FileManager.default.setAttributes(_attributes:ofItemAtPath:),但这种方法只给我很少的选择,它只让我能够修改文件的 修改日期创建日期posix权限等,这还不够。

然后,我尝试使用 NSMetadataItemsetValue(_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)

最后,我红了this post在 StackOverflow 上,这让我找到了这段代码:

_ = setxattr("/path/to/file".cString(using: .utf8), "kMDItemDisplayName", newValue.cString(using: .utf8), newValue.lengthOfBytes(using: .utf8), 0, 0)

执行后,用mdlsxattr -l查看结果,发现这只是给文件添加扩展属性的解决方案,元数据没有改变,只有名称为“kMDItemDisplayName”的扩展属性被成功添加。

结果不是我想要的(我只是使用 kMDItemDisplayName 作为我的问题的示例),我不只是想找到一种方法来向文件添加扩展属性,而是一种编辑 mdls 列出的属性的方法。也许没有解决办法?或者也许我应该以完全不同的方式来做?

最佳答案

并非所有元数据都可以更改。其中大部分不是直接存储的,而是根据其他元数据派生或计算的。

简单文件的显示名称源自其在磁盘上的名称和系统设置,例如扩展名是隐藏还是显示。 bundle (如应用程序)的显示名称稍微复杂一些,但是,假设您认为更改 bundle 的内容(这会破坏其代码签名)是 Not Acceptable ,则等价于同一件事。这些受制于系统语言。

还有一些文件夹的名称可以本地化以便显示,但这仍然基于它们在磁盘上的名称。

因此,要更改文件的显示名称,请更改其在磁盘上的实际名称。

对于其他属性,您可以查看 URL.setResourceValues(_:)URLResourceValues 以了解哪些属性是可设置的。您还可以查看 URLResourceKey 以查看哪些记录为“读写”。

关于Swift - 如何修改 kMDItemDisplayName 等文件元数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54720082/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com