- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图找到一种方法来更改文件的元数据属性(那些前缀为“kMDItem”的属性,由 mdls
列出),但我没有找到任何解决方案。总计
起初,我试过使用 FileManager.default.setAttributes(_attributes:ofItemAtPath:)
,但这种方法只给我很少的选择,它只让我能够修改文件的 修改日期
、创建日期
和posix权限
等,这还不够。
然后,我尝试使用 NSMetadataItem
和 setValue(_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)
执行后,用mdls
和xattr -l
查看结果,发现这只是给文件添加扩展属性的解决方案,元数据没有改变,只有名称为“kMDItemDisplayName”的扩展属性被成功添加。
结果不是我想要的(我只是使用 kMDItemDisplayName 作为我的问题的示例),我不只是想找到一种方法来向文件添加扩展属性,而是一种编辑 mdls
列出的属性的方法。也许没有解决办法?或者也许我应该以完全不同的方式来做?
最佳答案
并非所有元数据都可以更改。其中大部分不是直接存储的,而是根据其他元数据派生或计算的。
简单文件的显示名称源自其在磁盘上的名称和系统设置,例如扩展名是隐藏还是显示。 bundle (如应用程序)的显示名称稍微复杂一些,但是,假设您认为更改 bundle 的内容(这会破坏其代码签名)是 Not Acceptable ,则等价于同一件事。这些受制于系统语言。
还有一些文件夹的名称可以本地化以便显示,但这仍然基于它们在磁盘上的名称。
因此,要更改文件的显示名称,请更改其在磁盘上的实际名称。
对于其他属性,您可以查看 URL.setResourceValues(_:)
和 URLResourceValues
以了解哪些属性是可设置的。您还可以查看 URLResourceKey
以查看哪些记录为“读写”。
关于Swift - 如何修改 kMDItemDisplayName 等文件元数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54720082/
我试图找到一种方法来更改文件的元数据属性(那些前缀为“kMDItem”的属性,由 mdls 列出),但我没有找到任何解决方案。总计 起初,我试过使用 FileManager.default.setAt
我看到 Ken T. 之前已经回答了这个问题,但是我有一个代码似乎可以工作的情况,并且对 setxattr() 的调用返回 0,但是我想要修改的项目没有改变。 具体来说,我正在尝试更改元数据属性 kM
我是一名优秀的程序员,十分优秀!