首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >获取给定扩展的统一类型标识符

获取给定扩展的统一类型标识符
EN

Stack Overflow用户
提问于 2009-10-01 20:25:20
回答 2查看 7.9K关注 0票数 21

我正在尝试在Cocoa中找到一些方法来将文件扩展名转换为统一类型标识符。也就是说,我想要找到一些方法来做到这一点:

代码语言:javascript
复制
".jpg" => "public.jpeg"
".html" => "public.html" 
".ttf"=> "public.truetype-font"

我搜索了NSWorkspace文档,但什么也找不到。我能得到的最接近的是:

代码语言:javascript
复制
- (NSImage *)iconForFileType:(NSString *)fileType

返回文件扩展名的图标,并且

代码语言:javascript
复制
– (NSString *)preferredFilenameExtensionForType:(NSString *)typeName

这与我想要做的事情完全相反。你们有人知道怎么做吗?

我真的希望我不需要手动检查很多扩展。

提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-10-01 20:42:04

大约一周前我需要这个:

代码语言:javascript
复制
NSString * UTI = (NSString *)UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, 
                                                                   (CFStringRef)[myFilePath pathExtension], 
                                                                   NULL);

如果我在扩展名@"php“、@"jpg”、@"html“和@"ttf”上运行此命令,它将输出:

代码语言:javascript
复制
public.php-script
public.jpeg
public.html
public.truetype-ttf-font

多年后的更新11+

在Swift中,有两种方法可以完成此操作,具体取决于您的部署目标:

  1. 如果要在macOS Catalina和更早版本(在Big Sur之前)或iOS 13和更早版本上运行:

让fileExtension = "html“让unmanagedString = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension作为CFString,fileExtension作为CFString,nil)让typeIdentifier = unmanagedString?.takeRetainedValue()作为字符串?

UTTypeCreatePreferredIdentifierForTag()函数(仍然是CoreServices模块的一部分)返回一个Unmanaged<CFString>?;这是一种对CFString进行装箱的类型,您需要指示(通过.take...方法之一)内存管理语义应该是什么。

由于该函数遵循the Create Rule命名模式,因此它将向我们返回一个我们需要取得所有权的CFString。因此,我们使用.takeRetainedValue()CFString的所有权从手动内存管理领域转移到ARC领域。

然后在StringCFString之间需要进行大量的桥接。

  1. macOS Big Sur (和iOS 14)获得了一个新的UniformTypeIdentifiers模块,使这一切变得非常简单:

让fileExtension) =“fileExtension”让typeIdentifier = UTType(filenameExtension: html

票数 46
EN

Stack Overflow用户

发布于 2012-01-01 23:17:42

您可以使用终端并调用mdls,它为您提供了有关特定文件类型的各种信息,包括UTI。

代码语言:javascript
复制
mdls /myPath/to/myFile.ext

然后,mdls将在kMDItemContentTypeTree中显示相关的UTI(也可以从Cocoa App btw中调用mdls )。

票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1506251

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档