如果我有一个文件,我可以通过执行以下操作来获取图标:
NSImage *iconImage = [[NSWorkspace sharedWorkspace] iconForFile: @"myFile.png"];
但是,如果我只是想获取特定文件类型的图标(例如与png文件关联的图标,而没有已经存在的“myFile.png”),我不确定我该怎么做。
任何建议都表示赞赏!
答案 0 :(得分:26)
文档中的-[NSWorkspace iconForFile:]
下面是-[NSWorkspace iconForFileType:]
。你试过了吗?
答案 1 :(得分:3)
您可以先确定文件类型(UTI),然后将其传递给获取图标:
NSString *fileName = @"lemur.jpg"; // generic path to some file
CFStringRef fileExtension = (__bridge CFStringRef)[fileName pathExtension];
CFStringRef fileUTI = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, fileExtension, NULL);
NSImage *image = [[NSWorkspace sharedWorkspace]iconForFileType:(__bridge NSString *)fileUTI];
答案 2 :(得分:1)
这是Dave DeLong's answer的 Swift 5 版本:
icon(forFile:)
返回包含指定文件图标的图像。
声明
func icon(forFile fullPath: String) -> NSImage
参数
fullPath
- 文件的完整路径。
icon(forFileType:)
返回包含指定类型文件图标的图像。
声明
func icon(forFileType fileType: String) -> NSImage
参数
fileType
- 文件类型,可以是文件扩展名,编码的HFS文件类型或通用类型标识符(UTI)。
答案 3 :(得分:0)
这是PetrV's answer的 Swift 5 版本:
public extension NSWorkspace {
/// Returns an image containing the icon for files of the same type as the file at the specified path.
///
/// - Parameter filePath: The full path to the file.
/// - Returns: The icon associated with files of the same type as the file at the given path.
func icon(forFileTypeAtSamplePath filePath: String) -> NSImage? {
let fileExtension = URL(fileURLWithPath: filePath).pathExtension
guard
let unmanagedFileUti = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension,
fileExtension as CFString, nil),
let fileUti = unmanagedFileUti.takeRetainedValue() as String?
else {
assertionFailure("Should've gotten a UTI for \(fileExtension)")
return nil
}
return NSWorkspace.shared.icon(forFileType: fileUti)
}
}