使用 swift 或 obj-c 在 cocoa app OS X 中读写文件标签
Read & Write file tag in cocoa app OS X with swift or obj-c
有没有不用 shell 命令来 read/write 文件标签的方法?已经尝试 NSFileManager
和 CGImageSource
类。到目前为止没有运气。
NSURL
对象具有键 NSURLTagNamesKey
的资源。该值是一个字符串数组。
此 Swift 示例读取标签、添加标签 Foo
并写回标签。
let url = NSURL(fileURLWithPath: "/Path/to/file.ext")
var resource : AnyObject?
do {
try url.getResourceValue(&resource, forKey: NSURLTagNamesKey)
var tags : [String]
if resource == nil {
tags = [String]()
} else {
tags = resource as! [String]
}
print(tags)
tags += ["Foo"]
try url.setResourceValue(tags, forKey: NSURLTagNamesKey)
} catch let error as NSError {
print(error)
}
Swift 3+ 版本有点不同。在 URL
中,tagNames
属性 是 get-only,因此有必要将 URL
桥接为 Foundation NSURL
var url = URL(fileURLWithPath: "/Path/to/file.ext")
do {
let resourceValues = try url.resourceValues(forKeys: [.tagNamesKey])
var tags : [String]
if let tagNames = resourceValues.tagNames {
tags = tagNames
} else {
tags = [String]()
}
tags += ["Foo"]
try (url as NSURL).setResourceValue(tags, forKey: .tagNamesKey)
} catch {
print(error)
}
@vadian 在 Swift 4.0
中的回答
('NSURLTagNamesKey' has been renamed to 'URLResourceKey.tagNamesKey'
)
let url = NSURL(fileURLWithPath: "/Path/to/file.ext")
var resource : AnyObject?
do {
try url.getResourceValue(&resource, forKey: URLResourceKey.tagNamesKey)
var tags : [String]
if resource == nil {
tags = [String]()
} else {
tags = resource as! [String]
}
print(tags)
tags += ["Foo"]
try url.setResourceValue(tags, forKey: URLResourceKey.tagNamesKey)
} catch let error as NSError {
print(error)
}
有没有不用 shell 命令来 read/write 文件标签的方法?已经尝试 NSFileManager
和 CGImageSource
类。到目前为止没有运气。
NSURL
对象具有键 NSURLTagNamesKey
的资源。该值是一个字符串数组。
此 Swift 示例读取标签、添加标签 Foo
并写回标签。
let url = NSURL(fileURLWithPath: "/Path/to/file.ext")
var resource : AnyObject?
do {
try url.getResourceValue(&resource, forKey: NSURLTagNamesKey)
var tags : [String]
if resource == nil {
tags = [String]()
} else {
tags = resource as! [String]
}
print(tags)
tags += ["Foo"]
try url.setResourceValue(tags, forKey: NSURLTagNamesKey)
} catch let error as NSError {
print(error)
}
Swift 3+ 版本有点不同。在 URL
中,tagNames
属性 是 get-only,因此有必要将 URL
桥接为 Foundation NSURL
var url = URL(fileURLWithPath: "/Path/to/file.ext")
do {
let resourceValues = try url.resourceValues(forKeys: [.tagNamesKey])
var tags : [String]
if let tagNames = resourceValues.tagNames {
tags = tagNames
} else {
tags = [String]()
}
tags += ["Foo"]
try (url as NSURL).setResourceValue(tags, forKey: .tagNamesKey)
} catch {
print(error)
}
@vadian 在 Swift 4.0
中的回答
('NSURLTagNamesKey' has been renamed to 'URLResourceKey.tagNamesKey'
)
let url = NSURL(fileURLWithPath: "/Path/to/file.ext")
var resource : AnyObject?
do {
try url.getResourceValue(&resource, forKey: URLResourceKey.tagNamesKey)
var tags : [String]
if resource == nil {
tags = [String]()
} else {
tags = resource as! [String]
}
print(tags)
tags += ["Foo"]
try url.setResourceValue(tags, forKey: URLResourceKey.tagNamesKey)
} catch let error as NSError {
print(error)
}