Я пытаюсь найти способ изменить атрибуты метаданных файла (с префиксом «kMDItem», перечисленным mdls
), но я не нашел никакого решения для этого.ToT
Сначала я попытался использовать FileManager.default.setAttributes(_attributes:ofItemAtPath:)
, но этот метод дает мне только несколько опций, он только дает мне возможность изменять файлы modification date
, creation date
и posix permissions
и т. Д., чего недостаточно.
Затем я попытался использовать 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)
.
Наконец, я читаю этот пост в 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
.Может быть, нет решения для этого?Или, может быть, я должен сделать это совершенно по-другому?